Lately I've been looking back a bit at how things have changed in our work during the past decade. Maybe I'm a little behind the times since this is a little like a new year's reflection.
Since 2000, in our world of open source/
The Internet is a completely normal part of people's lives now, in the way TV and phones long have been.
Open source and free software is a widely-used and accepted part of the software ecosystem, used on both servers and desktops, at home and in companies of all sizes. Software licensing differences are still somewhat arcane, but the more popular options are now fairly widely-known.
Many of today's major open source software systems key to Internet infrastructure and application development were already familiar in 2000:
- the GNU toolset, Linux (including Red Hat and Debian), FreeBSD, OpenBSD
- Apache, mod_ssl (the RSA patent expired in September 2000, making it freely usable)
- PostgreSQL, MySQL, *DBM
- Perl and CPAN, Python, PHP, Ruby (though little known then)
- Interchange (just changed from MiniVend)
- Sendmail, Postfix
- OpenSSH (brand new!), GnuPG, Nmap, Nagios (originally NetSaint), BIND, rsync
- zip, gzip, bzip2
- screen, Vim, Emacs, IRC, Pine (and now Alpine), mutt
- X.org (from XFree86), KDE, GNOME
- proprietary Netscape became open-source Mozilla became very popular Firefox
- OpenOffice.org, the GIMP, Ghostscript, etc.
- and many others
Also worth mentioning: Java was (eventually) released as open source.
All of these projects have improved dramatically over the past decade and they've become a core part of many people's lives, even though invisibly in many cases. Time invested in learning, developing software based on, and contributing to these projects has been well-rewarded.
However, my hand-picked list of open source "survivor" projects reveals just as much by what's not listed there.
Take version control systems: A decade ago, Subversion was in its infancy, its developers aiming to improve on the de facto standard CVS. Now Subversion is a legacy system, still used but overshadowed by a new generation of version control systems that have distributed functionality at their core. Git, Mercurial, and Bazaar are the norm in free software and much business development now.
And countless smaller open source libraries, frameworks, and applications have come and gone.
Now, in contrast to the things that have stayed much the same, consider some of the upheavals that we've adapted to, or are still adapting to:
- migration from 32-bit to 64-bit: hardware, operating systems, libraries, applications, and binary data formats
- from a huge number of character sets to Unicode
- and from a variety of mostly fixed 8- and 16-bit character set encodings to Internet standard variable-length UTF-8
- widespread adoption object/relational mappers to interact with databases instead of hand-written SQL queries
- necessity of email spam filtering for survival, and coping with spam blacklists interfering with legitimate business
- search engine optimization (SEO) and adapting to Google's search dominance
- leased dedicated server hosting price wars: where all servers once cost at least $500/month, price competition brought us < $100/month options
- server virtualization and cloud computing
- configuration management: from obscure cfengine to widely-used Puppet and Chef
- Microsoft's introduction of XmlHttpRequest and the transformation of dynamic HTML into Ajax
- multi-core CPUs and languages to take advantage (Erlang, Scala, etc.)
- and so on.
The first of these changes, moving to 64-bit platforms and UTF-8 encoding, were mostly quiet behind-the-scenes migration work on the server. I think they're two of the more important changes, though of course the transition still is underway.
Thanks to UTF-8, new projects typically give little thought to character set encoding concerns, which once were a major problem as soon as any non-ASCII or non-Latin-1 text came into play. Just mixing, say, Japanese, Chinese, and Hungarian in a single data set was a real challenge. But anyone asked to display all three in a single browser screen knows how valuable UTF-8 is as a standard.
Moving to 64-bit architecture removed the ~3 GB memory barrier from applications and operating systems. It gave us lots of room to grow, and take advantage of cheaper memory, with the next limit not really in sight.
Other changes in the larger Internet ecosystem are more visible and have been more widely discussed, but still bear mentioning:
- online advertising as a major industry
- affiliate marketing
- social networks
- wikis as a standard fixture in society, from the overwhelmingly popular Wikipedia, to private wikis used in business and community projects
- prepackaged free software-style licenses have spread to other areas, for example via the Creative Commons
- free-of-charge email and other services
- mobile computing, from laptops to netbooks to phones
- rebirth of the Walkman as a little computer, and MP3 and other digital audio purchases now eclipse CDs
- DVRs, Hulu, HD TV
- wifi Internet widely available
- broadband Internet access in many homes
I don't mean to say that the preceding decades were any less noteworthy. Those working with the Internet should expect a lot of change, as it's still a young industry.
It's interesting to look back and consider the journey, and a little daunting to realize how much work has gone into adapting to each wave of change, and how much work remains to upgrade, migrate, and adapt the large amount of legacy code and infrastructure we've created. That, in addition to working on the next improvements we see a need for. Lots to learn, and lots to do!