Not for the first time, I’ve seen the suggestion in the echo chamber that Mono packages should be moved from Debian into the non-free repository, which is not formally part of Debian. The reason, as it so often is, is patents – specifically this time, the searing risk posed to Debian and its users that Mono’s packaging does not (and technically could not without forking from upstream) provide base class libraries which implement only the content of ECMA-335 4th Edition. As I understand it, this implies three things about the suggestion/demand: firstly, that the individual in question believes that Mono end users are at risk from patent litigation from Microsoft Corp because Mono’s implementation of Microsoft.NET beyond the content of ECMA 334/335 infringes on Microsoft patents; secondly, that the Microsoft Community Promise which promises not to assert legal claims over third party implementations of ECMA-335 4th Edition (and ECMA-334 4th Edition which defines the C# language) would render a pure ECMA-only runtime safe if it existed (which it does not); thirdly that without the protection offered by the Microsoft Community Promise, the source code licenses of Mono are irrelevant – the patent risk renders the software non-Free.
It appears, unfortunately, that the community of “Free Software Advocates” don’t actually understand what Free Software actually IS. That explains an awful lot, but should surprise nobody. So here’s a lesson on what, exactly, is being advocated for.
The Free Software Foundation defines four Software Freedoms – these are the minimum criteria required for something to be considered “Free Software” by the FSF:
- The freedom to run the program, for any purpose (freedom 0).
- The freedom to study how the program works, and change it to make it do what you wish (freedom 1). Access to the source code is a precondition for this.
- The freedom to redistribute copies so you can help your neighbor (freedom 2).
- The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
Other groups have their own variants on these, but those are really just clarifications on the FSF definition - for example, the Debian Free Software Guidelines mostly line up, but have some additional clauses such as clause 4 which allows software to be considered Free if source code may be redistributed without modifications, as long as patches may be shipped alongside.
These four freedoms are offered to you by the software’s copyright holders only, and apply regardless of their choice of license – any “Free” license, from a lengthy legal tome like the MPL to the completely-Free WTFPL, will offer you these four basic freedoms as a minimum, and any additional clauses in their licenses cannot seek to restrict these freedoms.
These four freedoms represent the beginning, and end, of whether a piece of software is Free or not.
Software does not need to be developed in the open, in a community-responsive way, in order to qualify as Free – projects such as Google’s Android, which are developed under a “throw a final release over the wall, bugs and all, and expect people to thank you for it” model, are still free, even if contribution is difficult. Actually, on a related note, software does not need to solicit upstream contribution of any kind in order to qualify as Free – as long as you personally can redistribute the code with changes, then that’s enough.
Software does not need to serve a fully or even partially legal purpose in order to qualify as Free – the favoured tool for causing distributed denial of service attacks, Low Orbit Ion Cannon, is Free Software, even though realistically it serves no legal purpose. DeCSS, the code initially used to allow DVD media to play on Linux (by breaking the CSS encryption mechanism) is Free Software.
Software does not need to be useful or tasteful in order to qualify as Free – the Last Measure Operating System, a minimalist OS primarily designed to loudly display the famous shock site images from goatse and related, is Free Software. Even in somewhat less clear-cut cases of taste, your personal opinion of software has no bearing on whether it is Free Software, as long as the four freedoms are guaranteed by the author(s).
Software does not need to have only Free dependencies to qualify as Free Software – it is entirely permissible to write software which relies upon a non-Free framework or library, and release your code under a Free license. It is the downstream recipient’s problem to provide the dependencies, including their choice to craft a Free replacement for any non-Free code you make use of. Debian has a special repository called contrib, where Free software which only works with non-Free data, lives – for example, Free game engines which require the insertion of proprietary game data in order to operate. You could write Free addons for expensive proprietary software such as Matlab, and as long as your code is Free, your responsibilities are met.
Software does not need to avoid patents – software, algorithmic, or otherwise – in order to qualify as Free. The Freetype font library was still entirely Free Software when Apple were slinging threats around regarding font hinting data. FFmpeg, the Swiss Army knife of media codec libraries, is Free Software regardless of the number of codec patents it breaks.
Software does not need any third party approval to be Free Software – the rights of Free Software can only be offered by the copyright holders, and the opinion of third parties is an irrelevance as to whether software is Free. The GPL’d clone of Blizzard Entertainment’s Battle.net servers, bnetd, is Free Software, regardless of legal takedown notices.
Third parties cannot influence whether or not a piece of software is Free. They can influence tangentially related topics, such as whether the software can be legally used, but that’s the limit. And even within a given piece of software, where copyright is shared by contributors, the author of one component has no say on other components. And you can’t make code which is already released as Free, suddenly un-Free – you can, if you hold all the copyrights, close up future versions, but your existing code remains Free forever. Reasonably, you can opt to avoid using a piece of software because you have requirements beyond it merely being Free Software – Cdrtools has been avoided in Debian for a long time due to the upstream author’s legal threats and rambling – but that is a side issue as to the question of whether or not the software is Free.
Patents are simply not involved in the question of whether or not something is Free Software, except for one narrow case: where Free Software is released by somebody who also holds related patents, and uses a license such as Ms-PL or Apache 2.0 or GPLv3 which requires them to also release those patents to those using/distributing the software. Outside that narrow situation, patents do not relate to the question of whether something is Free Software – even if a company releases some source code under a license like BSD then demands patent fees from end users.
So, on to the original topic of Mono. Every piece of Mono’s source code is released by its authors under a license which guarantees the FSF’s Four Freedoms. Whether or not you find Mono useful or tasteful does not affect that Free status. Whether or not Mono infringes upon any laws or patents does not affect that Free status. That Mono contains some libraries whose upstream author is Microsoft does not give Microsoft even the remotest claim to a single line of code outside the code they wrote – and even then, it wouldn’t be an issue, since the licenses they use are Free. In fact, both the licenses used in the Microsoft portions of the source base make patent grants to all users, in addition to guaranteeing the FSF’s Four Freedoms – and any license contamination would decrease, not increase, any risk of legal attack from Microsoft. There’s even plenty of Microsoft code available for re-use at a lower level than the currently re-used libraries: The Microsoft.NET Micro Framework (for use on embedded platforms direct to the metal) is under the Free Software Apache 2.0 license, and would provide access to some of Microsoft’s runtime and class library code, complete with a patent grant, if it were desired.
Please try to keep your thought processes straight. If you want to argue that you’re all for Free Software, please remember that there’s plenty of Free Software you might not approve of – and don’t claim to be a “Free Software advocate” then use bogus arguments to claim that Free Software is not Free. Free Software includes LMOS and LOIC and Mono, whether you like it or not.