Old Code and Old Licenses
By webmink on Feb 12, 2009
I was in Brussels at the weekend to attend FOSDEM, one of the handful of "real" Free software developer conferences I attend each year (another is LCA which I went to in Hobart two weeks ago). I was once again honoured to be able to briefly speak to the assembled audience as I did two years ago. This time I announced a small license change to some obscure code, written before the GPL was finalised, to fix a problem for Linux.
Why would that interest anyone? Well, the code in question is the original implementation of Sun RPC, which went on to become RFC 1057 and today is a core part of every UNIX-family operating system. Including Debian GNU/Linux.
The way the code was originally licensed was exceptionally liberal. Written in 1984 or earlier (before the GPL existed), it allowed unfettered use of the Sun RPC implementation in any program for any purpose. The only significant restriction imposed, entirely reasonable to most eyes then, was to say that the module itself could not be sold as-is, only as part of a larger work.
What was liberal is now conservative
Times change. During the 80s, Richard Stallman's Free Software movement established the four freedoms. During the 90s (1994-7), the Debian Free Software Guidelines established a need for the code in their distribution of GNU/Linux to be fully Free software. By the beginning of this decade, Debian maintainers were making a serious effort to audit the millions of lines of code in Debian for true DFSG compliance. And in 2002, they found the old Sun RPC code in core Linux files glibc and portmap.
Reading the history for Debian bug 181493 tells the next part of the story. Inside Sun, the challenge of finding the code in question was Just Too Hard, and the things reached an uneasy impasse.
The issue came back to life last year when the bug was re-asserted as part of the run-up to the Lenny release. I was contacted both by folk at Debian - notably my friend Ean Schuessler - and at Fedora asking if there was anything I could do to accelerate licensing of the old code. Both projects had decided to take a hard line and removing the code from glibc and portmap was going to be a real headache, especially for the stability of glibc.
The task of relicensing old code can be pretty time consuming and involves people who are already much in demand.
- First, the old code is often very old. The people who wrote it are no longer with the company, it is no longer part of a current product, we sometimes can't even be sure it ever came from Sun. We have to find the original code if we're to make any progress at all. Doing so might mean retrieving crates of paper from long-term storage and crawling through them.
- Second, once the code is located, a legal expert has to look at the origins of the code and maybe once again crawl through retrieved paperwork to find the contracts behind the code. Their job is to determine if Sun actually has the right to change the license at all.
- Third, someone has to believe it is their job with respect to the code in question to act on Sun's behalf to evaluate the change, authorise it and bind the company officially.
With help both from Ean and friends at Debian and from the Fedora team at Red Hat, we managed to identify some modern OpenSolaris code that matched the code in Linux. This was a key step. It meant we could trace ownership through the comprehensive records for OpenSolaris and start the process moving. By last week, we finally reached the point where we felt comfortable to relicense the Sun code involved.
On Saturday I was able to tell Europe's Free Software developers that the licenses on the RPC code are no longer a barrier to Free software - we'll change the license to Sun's copyrights in the RPC code to a standard 3-clause BSD license, allowing inheritance of that licensing by both Debian and Fedora. I'm delighted to have been able to fix this problem, which arose not because of failure but because of the success of software freedom over many years and becuase of Sun's early commitment to it.