There is an old joke that goes like this: what is the main difference between hardware and software? When you use the hardware for a very long time, it eventually wears down and breaks. When you use software for a very long time, it eventually matures and stops breaking.
This joke is funny to software developers, because they know it is true. It flies above the head of the general public because it is rather counter-intuitive. The first part rings true for just about everyone. The less mentally agile citizens (or those who grew up in simpler times and have trouble finding themselves in the modern hustle and bustle of technology) can apply the car analogy in their heads (think of hardware as your car and how it ages) and it kinda works. Everyone else, whose brain can correctly interface with modern electronic appliances know this to be true from experience.
Modern electronics age quite rapidly, and generally has to be replaced long before it starts to break due to physical wear and tear. This is partly by design (planned obsolescence) and partly due to inherent forces within the industry (Moore’s Law). This process is very visible, even to the untrained eye. Anyone can probably name a dozen technologies that rose to prominence and then faded into obscurity within their lifetime.
Commercial software follows a similar obsolescence cycle – or at least so it would seem to an untrained eye. Publishes love to apply superficial UI redesigns and add minor changes to increase the number of bullet points in the feature list every few months, and force customers to re-buy their software under a new version number or even updated product name. Constant feature additions (which lead to inevitable bloat) usually make the software perpetually unstable. So those who are accustomed to working with proprietary licensed software the joke seems incomprehensible.
But for free software, it works. Free software doesn’t age and usually does not become obsolete. It matures, stabilizes and becomes a rock solid foundation upon which you build other software. It actually blows people’s minds when I tell them I use software that is over 30 years old every single day. Don’t believe me?
As you probably know, I am a LaTex user. At the core of that complex typesetting is the Tex codebase which was originally released back in 1978 and frozen in 1989 at version 3. That software is so stable that since then, whenever a new update is released the version number is not incremented, but instead a significant digit is added at the end of it, so that the version number as a whole approaches π. Donald Knuth himself proposed that after his death Tex ought to be updated one last time, and the version number should be changed to π at which point all future bugs will automatically become features.
The primary text editor I use is Vim which is based on vi, which was written by Bill Joy in 1976. While novice programmers often scoff at it, and regard it as archaic, it remains an extremely powerful tool for power users. It is also one of the Two True Text Editors™ – the other one is Emacs which was written by Richard Stallman around the same time as vi, but designed to solve an entirely different set of problems. Bill Joy was writing an ultimate tool for text manipulation over slow network connections – an editor that would minimize cursor movement and maximize the amount of work that could be done by chaining key-stroke commands. Emacs on the other hand was built as an infinitely customizable text editing framework. Stallman knew that coders will always need their editors to do weird things, and that no matter how great the plugin API is in your IDE, it will probably not be enough. So he created a LISP interpreter with a built in text editor allowing users to write and re-write the core of the system at a whim.
The shell I use is Bash which was first released back in 1989. It was a backwards compatible replacement to the Bourne shell (1977) which in turn replaced the Thompson shell (1971). Despite it’s age, Bash is a staple of the Linux and Unix worlds. Along with the Bourne shell it is the default shell on most systems, and a primary interface through which admins interact with most servers on the internet.
The C programming language, used to write all of the above (except maybe the Thompson Shell), as well as the operating systems on which these programs run was created in 1972, and the latest stable release is from 2011. It is still used to create modern applications today, and tends to be the preferred language for systems programming. The 22 year old Linux kernel, originally released in 1991 by Linus Torvalds is written primarily in C, and has been in continuous development since then.
Apache and PHP – the technology used on the back end of this site (and many others on the internet as part of the ever popular LAMP stack) are all close to 20 years old now. PHP is still big mess of a programming language, but it has matured considerably since it’s inception, and the community that spawned around it has become adept at working around it’s shortcomings and building bridges over it’s feature gaps and plugging its security holes.
Algorithms and methodologies used in all the above applications are even older than that. Most of the state of the art searching and sorting algorithms as well as most of the common data structures such as trees and graphs were discovered in the early 70’s. I like to joke around that the reason for this was that back then resources such as memory and disk space were very limited, and Moore’s law was not a known trend yet. These days programmers don’t have the same incentive to be clever – it is often much easier to throw hardware at the problem at hand, or wait 18 months and then double your performance than devise a clever method of working around your limitations. It is however probably more accurate to say that most of these fundamental algorithms were devised back then rather than now, for the same reason many of fundamental scientific and mathematical theorems were discovered in the ancient times – it is much easier to stumble upon patterns and solutions when the science is young and the field is almost entirely unexplored.
I guess my point is that free software does not typically age – it matures. It doesn’t become obsolete – it becomes stable. Most application software grows until both the creators and community agree it is feature full, and good enough, at which point it stabilizes. Since new features are no longer aggressively added, the code surface for bugs to hide in decreases and over time it approaches zero. Systems software on the other hand is in the unique situation – it can never be stable, because it always has to catch up to hardware and support new devices and new interaction paradigms. Therefore OS can be either slightly buggy or behind the times, but not both at once.
I usually tell young, impressionable new programmers that releasing open source software is like getting married. It is a life-long commitment. Once you put it out there, you are stuck with it. There will always be bugs to be fixed and new features that will need to be added. And there will always be users out there for whom backwards compatibility will be of paramount importance. Mistakes you make early in your design and development process will haunt your for the rest of your life. Even if you divorce yourself from your project, you can never erase it from existence. It will always be around in the form of various forks and continuation projects. The only way to kill a popular open source software is to make it irrelevant. That usually only happens when you or someone else develops a competing product that completely outclasses the original. And even then there will almost always be holdouts and old fashioned users refusing to let go.
Software is kind-of weird like that. On one hand it is a very volatile market with a lot of turnaround. The rapid churn of the hardware world, the breakneck pace of new advancements and discoveries makes it seem like there is very little permanence in there. To a layman’s eyes, it might seem that applications become obsolete almost the instant they hit the market. But this is not true. Software is surprisingly durable. It endures, it evolves and it carries on. You would be surprised how much of the shiny programs you use right now can trace their lineage all the way to the dawn of the information age.
I would wager that a lion share of software on your computer is also at least a decade or two in the making. What ancient, but still perfectly usable programs do you use? How old are they, and why do you think they survived for so long?
“When you use software for a very long time, it eventually matures and stops breaking”. You dont have to tell me, tell it to the programmers who through a new version of adobe reader at us every 6 month. There is absolutely no maturing or breaking less in that development.
@ Mrjones2015:
To be honest, I think this is because they constantly keep adding new features in order to keep the Reader in lock-step with their proprietary PDF authoring tools. Personally, I have never understood why Adobe Reader had a plugin architecture, and why on earth it shipped with plugins for playing embedded audio files for example. 99.9% of the time, all that additional garbage is useless to the average user but Adobe seems to keep plugging away at it because that’s the only way they can justify shipping this monstrosity for free, even if there are adequate open source alternatives.
I mean, how is it that Google can put a fast lean PDF viewer into Chrome that opens documents in mere seconds, whereas Adobe Reader takes like a minute to start and is a Swiss cheese of security holes.
Huh, Reply seems wonky, so…
They can get away with it ’cause loads of clueless people continue to publish “pdf” documents that ignore the standard and include loads of the “latest-and-greatest” proprietary crap add-ons, forcing recipients to stick with Adobe Reader if they want to load them. *grumble grumble*
BTW, as someone working from the inside, I get the feeling that the messed-up-to-hell construction industry is in large part to blame for these problems…
Few things.
More law has changed. The computer I brougt 7 years ago is still sufficient. 2Ghz Athlon X2 + 2GB RAM. And the first GB of memory was from a previous rig, even older. Many people still buy dual core with only 4GB of memory (most laptop are dual core), sometime even only 2GB (ultrabooks). So this computer is still current and could be user a few years more.
7 year before that rig, computers had 300Mhz processors with 64MB of memory. We are not on the same scale. You had to buy a new computer every 3 year.
For software, only a very few software mature like you say. The one that everybody know. Like 1 project out of ten thousand. Most programs just die.
Well.. your point isn’t completely wrong. But Software will only get that old and still be used if the thing you want to accomplish with it doesn’t change.
Text-Editing is a simple task and vim does it pretty good indeed, but then you go along and add those hundreds of features yourself, thus making it pretty different to the vi you would have used 20 years ago.
Even worse: most people nowadays don’t know about terminals and dont get vim at all. For those this old software just seems outdated and unusable. They won’t even find out how to quit without hassle.
I won’t even go into “modern” systems without keyboard (yeah, i know.. those are unusable for you and me, but there seem to be people who think such shit is sufficient), you wouldn’t want to use anything vim-style on those, wouldn’t you? Why should you hide controls behind keyboard-shortcuts, if your keyboard-shortcuts need screen estate on their own?
The same applies to Bash, everything inside LAMP and C wasn’t even a still usable Language 20 years ago, i dont even want to start bashing it and telling you why its bad to use such crap today, while better alternatives like go (or imho even the older-than-c pascal) are around.
@ Dr. Azrael Tod:
i forgot: LaTeX is a completely different case… it’s hard to argue why it should change and i won’t even try.
@ Nicolas:
I think that significant factor in the apparent slowing down of Moore’s law was the big changes in the video game market that were caused by the exceptionally long lifetime of current gen consoles. Since the console hardware became stagnant, and major publishers couldn’t afford to ignore it they stopped pushing the PC hardware to its limits. So the growth slowed down a bit, at the consumer market. The PC vendors simply concentrated on selling somewhat dated hardware at the “top of the line” prices because they could get away with it, as the new games were no longer as resource intensive. But I believe that Moore’s law is still holding, at least for the most part.
@ Dr. Azrael Tod:
Very good point. Source control is a great example here – we have come a long way and for most modern projects CVS is no longer an adequate tool. We have new paradigms such as distributed source control with great implementations such as git and Mercurial.
So yeah, very often software simply becomes obsolete because we end up with new paradigms, new philosophies and new ways of doing things that make the old stuff irrelevant.
As for the other points…
I have a bluetooth keyboard so that I can use Vim on my iPad… Well, not on the iPad itself, but when I use the iPad to ssh into my linux box. Believe it or not, these things make for a pretty decent thin client – the form factor, weight and battery capacity just can’t be beat.
C will probably be around at least as long as Linus is around. I can’t really see the Linux Kernel being ported to any other language while he is at the helm. And with the Kernel being a C project there will always be a large ecosystem of C based code clustered around it in terms of modules, applications and etc…
PHP is pretty crappy, but some of the most successful web projects are written in it (Facebook, WordPress, Joomla, Durpal, etc..) so it will be around for a long time. The language is slowly maturing and shedding a lot of it’s idiosyncrasies (sometimes picking up new ones) and the community around it has made great strides in trying to get PHP code not to be terrible (PSR standards, Composer package management, etc..).
Yes, there are usually always new and better ways of accomplishing the same things. I guess my point was that software doesn’t age as rapidly as people think it is. Compared to some hardware for example a lot of the things I mentioned above has tremendous staying power.
Luke Maciak wrote:
I have a bluetooth keyboard so that I can use Vim on my iPad… Well, not on the iPad itself, but when I use the iPad to ssh into my linux box. Believe it or not, these things make for a pretty decent thin client – the form factor, weight and battery capacity just can’t be beat.
of course they can… my Toshiba ac100 does exactly this! AND you can use it on your lap or while standing without needing 5 hands. But that wasn’t my point. My point was: If you have no keyboard, then the UI of vi/vim makes no sense at all. Yes you can add a keyboard to your system to make up for that, but most people wont.
Luke Maciak wrote:
I can’t really see the Linux Kernel being ported to any other language while he is at the helm.
I don’t see any big project ported to an entirely different language soon. But that Banks still use cobol for legacy-reasons doesnt make me want to use cobol for my next project.
Luke Maciak wrote:
PHP is pretty crappy, but some of the most successful web projects are written in it (Facebook, WordPress, Joomla, Durpal, etc..)
aka “let’s eat shit… millions of flies can’t be wrong”
I won’t even go into discussing the quality of most PHP-Projects… (i’m looking at you WordPress, Typo3, MediaWiki, …). Let’s just say:
PHP is wrong and should not be used!
PS: i had links behind most single words of that last line, to some anti-php-rants. Since your spamfilter stops me from using too much links, here is the code as it was (and Links as Comment)
@ Dr. Azrael Tod:
Heh, this might be my favorite image ever:
So yeah, I’m not gonna defend PHP. I honestly agree that it is not a good language. I guess I’m part of the problem though because I continue using it though. :P
Hmm… Maybe I should reiterate my point. Perhaps it is the case that old software simply doesn’t go away, for better or for worse. Hardware breaks down and eventually you have to throw it away and upgrade. Old software can be patched and kept alive almost indefinitely as long as someone out there is willing to do it.