Design vs Evolution
I found something interesting in the Linux kernel mailing list archives while researching a few topics for my operating systems design class.
The full message from Linus Torvalds is linked below, but I’ve also quoted a few key parts.
Let’s just be honest, and admit that [Linux] wasn’t designed.
[Linux] grew. It grew with a lot of mutations - and because the mutations were less than random, they were faster and more directed than alpha-particles in DNA.
…no major software project that has been successful in a general marketplace (as opposed to niches) has ever gone through those nice lifecycles they tell you about in CompSci classes. Have you ever heard of a project that actually started off with trying to figure out what it should do, a rigorous design phase, and a implementation phase?
Software evolves. It isn’t designed. The only question is how strictly you control the evolution, and how open you are to external sources of mutations.
And too much control of the evolution will kill you. Inevitably, and without fail. Always. In biology, and in software.
Though I’m not experienced enough to have a very in depth discussion, I will say that this is definitely an interesting way of thinking of software design – one that I would say challenges how computer science is commonly taught even today.
This isn’t to discount the benefits of good design, but rather to say that no matter how detailed your design, what you end up with may not resemble it very closely due to evolution along the way. That goes especially for a project like an operating system.
This message I believe also reflects the unique time in which Linux started being developed. It was a time when developers could start to more easily collaborate and share their work and ideas over the internet than in years prior. I wonder how significant of a factor that was in Linux’s evolution.
If anyone has any insights or resources to share on this topic, feel free to reach out. I’m finding that learning about all this is really interesting but it was a little before my time.