Thirty years of GNU


Figure 1: Pond in late July

Thirty years is a long time, I can't believe I've been programming for a bit longer than that. As I was reading the Hacker News threads I got to thinking how much has changed over the years in how we program. I don't recall a lot of the early GNU history mainly because I was working at IBM, Unix was just another OS and my first one was MVS. ThinkPads were out in the early to mid 90s and I had one when I went back to grad school. It ran some sort of emacs on top of DOS, what else did I need? One of my professors suggested I load up this thing called Linux on my ThinkPad but that was early days and I knew it would be an enormous time sink to get working. Even years later, depending on the distro and model number, getting Linux running on a laptop was still a weekend chore. Recently I was able to get an old X20, with no CD/ROM, loaded up with Debian from a USB stick in just a few hours. It's come a long way. There was also this thing from NCSA that people were playing with, but I was too caught up in programming language theory to care about the ability to access my course assignments remotely using this browser that spoke HTTP. I mean we had FTP and telnet, who needed this fancy new stuff.

What programmers spend their time on

Recently there was a thread on HN prompted by a a post from Joe Armstrong that really resonated with me. He made the observation that programmers now spend much of their time figuring out how to fix other things that were supposed to work a certain way. The infrastructure and toolsets for programming have grown a lot over the last 30 years. Back in school, slogging thru the Dragon Book, writing a compiler for a small subset of a programming language was a major term length project done in teams of four and five. Now it's probably a one week assignment where students are expected to work independently. Software was more difficult to get right (arguably still is) and generally programmers were not expected to understand so many languages at the same time.

In a typical startup today it's not unusual to see 5-10 different languages being used, counting scripting tools. On my current project so far I've come across good amounts of Python, Obj-C, Elixir, Erlang, Bash, MongoDB and Bitcask for persistence, Redis, etc.. and of course several notification and other web services.

It's hard to say how well this proliferation of software works, there's a lot of bad stuff out there. Still, it's almost always worth evaluating and trying out, because software is very time consuming to build from scratch and anything that can save time is worth it. I mean how many implementations of a unique id generator that uses some hardware bit does the world need? So evaluating and reusing existing codes is increasingly a requisite skill for a programmer.

English and Algebra

On the occasion of GNU's birthday, Richard Stallman published an article on the importance of free software, covering the usual discussion of the four freedoms as they pertain to recent events concerning the NSA, SAAS, and the emergence of mobile platforms. As a long time supporter of free software I didn't find much new here.

Mr. Stallman commented that source code was like a combination of "English and Algebra". I'm not sure what he had in mind here, but this sure seems true to me, at many levels. On the one hand algebra makes me think of universal algebra, sorts, operators, and so forth. From the standpoint of programming language theory, programming is certainly about algebra. It's also about English when one considers what it takes to build applications and larger systems. We have tools that extract comments from programs to produce documentation, the notion of literate programming, we choose variable and function names in order to make programs self-documenting.

The comparisons go even deeper when we look at domain specific languages (DSLs), code generators, compilers, and foundations. The cabal of scheme hackers at Indiana University seems quite healthy and category theory continues to be used as a tool, at least in a descriptive fashion. Programming in this sense, to me anyway, is applied mathematics.

It's also like English in that much of language design is about making code readable and comprehensible. Since software always needs someone to work on it, it must be readable, by more than just the author.

Of course, as expected, the commentary on Hacker News, was the usual sorts of things one hears whenever Free Software or the GPL is mentioned. The GPL sure brings out strong opinions.

How do I make money?

This is my favorite, how can one make money when software is free. It's been 30 years and programmers seem to me to be doing pretty well making a living. Perhaps we should rephrase this to "how do I make easy money". Here's a representative comment along these lines:

"A fundamental weakness in the free software argument is that it lacks a solid, broadly applicable proposal for remunerating the effort of software engineers. A similar argument could be made for the abolition of copyright – with the same weakness. It helps explain why the free software community has not yet delivered things like Google Docs, Github and AWS."

Free software is very different from open source, from the standpoint of licensing. In fact arguably the rise of "Open Source" was all about distinguishing itself from the political aspects of "Free Software" and focusing on the collaborative aspects. When it comes to the practicalities of access to source code, open source and free software are the same, and typically free as in beer. So one could say that open source hasn't delivered things like Github either. Of course Github is based on Git, which happens to be Free Software, which would seem to dispute the quote entirely.

What both Free Software and Open Source software have done is to level the playing field. Free software didn't give us Github but would we have Github without Git? Free and open source software are the same when it comes to access to the source code. There's also a lot of open source software that's not really open source. When a large company with considerable resources builds a nice piece of software and then publishes it as open source, to me that's hardly open source. Open source should be done in the open.

So when we ask how one can make money as a programmer using Free Software we can also ask the same question of Open Source. From what I can tell programmers are doing just fine. The real distinction is between open versus proprietary. Programmers are expensive, but when one has access to the source code then the barriers to entry are lower and it becomes difficult to use software to extract rents, to make easy money. What the Microsofts, Oracles, and IBMs of the world were able to do is probably a once in a lifetime opportunity. It's not clear that free or open source software produces better results either. The last 10% of a decent user interface and desktop has almost always been tough for both the free software and open source software communities, I'm not sure entirely why.

A lot of people have tried to build free and open source software businesses, using dual licensing and so forth. I thought this piece by Mike Olson summarizes the issues quite well. So yes, it's tough to write some cool programs and then sit back at let the billions roll in. However that doesn't mean programmers can't earn a decent living programming. It could be the case that harnessing networks effects and locking users into proprietary software is an historical blip. Because software needs to be continuoulsy worked on, access to the source prevents lock in and encourages innovation. Vendors thus have to provide proprietary add ons or provide services that don't require distribution of code. The money is not in the code.

Free software is generally more restrictive than open source licenses in that it does try to eliminate the free loader problem with it's fourth freedom. It uses copyright law to subvert copyright, a very cute hack. It is political in that it promotes a philosophy of share and share alike. Some programmers will dual license, using GPL for non-profit usage and commercial licensing for commercial entities. This seems entirely fair to me.

Freedom is not free

If software is truly going to devour the world then it should be free, in my opinion. I don't believe that the GPL is no longer needed because open source has prevailed, it hasn't. Free software and the freedoms guaranteed by the GPL are critical. Historically, mathematics has often been used for military applications, it's very powerful. If programming is a form of mathematics then all children need to be exposed to it and learn it. As Eben Moglen would ask, "how many Einsteins have we lost for lack of an education".

Regardless of one's opinions on the GPL I think all programmers should be aware of these issues, in fact it might be good to teach copyright, patent law, and software licensing as part of a computer science education. My minimal understanding of patent law tells me that the notion of reduction to practice is important. With hardware, which often requires significant capital, this seems to make some sense. Mathematics, thankfully, can't be patented, so it would seem to me absurd that software can.

Happy Birthday GNU!

Software is a fascinating thing. If I think of analogies to crafts I think it's like working more with cloth than with wood or metal. It's hard to get right, very hard, though easy to learn, anyone can jump in and start hacking. It takes very little capital to produce these days, mostly lots of time and thinking by programmers, and it's very much a community and a contact sport. The main tools I use daily in my programming work, emacs, linux, and git, are free software, and for that I thank GNU. Happy Thanksgiving.

"We are coming to realize that computing is not like any single other thing people do—it’s a little like science, mathematics, engineering, a little like art, architecture, writing, horticulture, and a lot like a long, unplanned journey." - Richard Gabriel (Allen Neward Award Statement)

[FSF Associate Member]

Date: 2013-11-28 Thu

Author: Bob Dionne

Created: 2017-12-16 Sat 15:15

Emacs (Org mode 8.2.10)