Thursday 24 September 2015

The FSF/GNU ideology is silly, and we'd be better off without it.

TL;DR: The FSF/GNU ideology is silly, unjustified, and in this day and age the software community would be better off without it. Especially in the context where there are two FOSS projects, one GPL, the other one not, competing with each other. GCC vs. LLVM being a particular case I care about.


These are thoughts I've been meaning to write down for some time now. It's not a new topic for sure - discussions about Free Software have been around for a long time. But recently this topic has regained importance for me, due to my interest in the area of language toolchains. Here, two major projects - GCC and LLVM - undergo substantial development effort, yet they effectively compete with each other because of differing software licensing ideologies[1]. And this kind of competition in the FOSS world is not good: it's a waste of resources. So I'd rather see GCC wither and die, and have more people focus on LLVM, and LLVM-related work.

Before proceeding, let's look at what "Free Software" means:
Free software, software libre, or libre software is computer software that gives users the freedom to run the software for any purpose as well as to study, modify, and distribute the original software and the adapted versions.
- from the Free software Wikipedia entry.
So, we're not talking about gratis (free as in cost) software. A lot of developers are likely already familiar with this distinction.

The first point I want to put forward is: I don't have a problem with Free software itself. Quite the contrary - Free software is good, it's great to have more of that around. I myself am a big FOSS enthusiast. I've chosen to spend a lot of time - in total well over a man-year - doing unpaid development work in FOSS projects, out of my own cash reserves, whereas I could instead be earning a regular salary here in London.

What I have a problem with, is the the *ideology* of the Free Software Foundation and GNU. For those not already familiar with it, they believe that *all software* should be Free, that such is a fundamental *right* of all software users! And they are not particularly interested in compromises, nor are they friendly to projects and organizations that don't fully share their ideology. This last aspect is quite important, as one should realize it is quite different from merely supporting the idea that there should be more FOSS software around.
 
One unfamiliar with FSF/GNU can look into their website for details on their philosophy, and their reasoning. Here's a sample quote:

"These [software] freedoms are vitally important. They are essential, not just for the individual users' sake, but for society as a whole because they promote social solidarity—that is, sharing and cooperation."
- http://www.gnu.org/philosophy/open-source-misses-the-point.html

"they promote social solidarity", OMG...


What a subverted justification! The FSF people basically masquerade their own personal interests and values to some sort of ethical principle that should be of importance to the whole of society. The best example of such is this dystopian short story from Richard Stallman. It's a great showcase of their mindset, and mind you that short story is not hyperbole. It's the scenario they see themselves fighting against. Yet these principles are of concern to only a few computer/digital nerds, they matter very little to society at large (and not because of technical ignorance). But more on that later on.

Looking back at the articles and writings of the FSF, the more you read them, the more it becomes clear that their whole argument is basically: it would suck to live in a world with so many closed systems and closed software.

Well, I do agree that having so many closed computer systems would suck, and open alternatives would be much more preferable. But, FFS, desire is no basis for something being a right, a "freedom". Just because it sucks a lot not to have something, doesn't mean you have a right to have it. It also sucks that I don't have a fancy yacht I can sip cocktails off the coast of some Greek island. That sounds like a hyperbolic argument, doesn't it? But it actually isn't: Why is software any different from a yacht? Because software can be copied for free, unlike a physical object? But software still costs to *produce* in the first place. It doesn't grow on trees, someone has to *spend effort to design it*.

Furthermore, for the purposes of granting usage rights, even if we considered software to be different from physical objects (because software is information and can be replicated at no cost) - then why doesn't the Free software ideology apply equally to other information works: books, music, movies, etc? Why shouldn't all those be Free too? Why should copyright law apply in any different way to software, than to other information works? Someone explain this inconsistency to me... [4]

Here's another gem, a recent one, from John Sullivan, Executive Director of the FSF:
"I stay involved because I think it's one of the most important social movements in existence,"
- this opensource.com article.

Seriously?... I mean forget about racial injustice, gay rights, women's rights, free speech issues, drug and prison reform, climate change, the obesity and food crisis, campaign finance reform, gun rights/reform, banking system reform [2]... Hell, what about even other computing issues, like government surveillance, that one could argue they are separate from the cause of Free software? No, forget those, one of the most important social movements in existence is certainly making sure that everyone runs GNU (or whatever) on their computing devices... o_o'

Seriously, what sane person thinks the general public is unhappy or disconsolate in any way because they can't freely tinker with the software or hardware of their iPhone, iMac, XBox, Tivo, etc? These devices brought much joy and usefulness to their users, regardless of being closed systems. Yet GNU says "These freedoms are vitally important [...] for society as a whole". Such arrogance!

Rather, could the reality simply be that FSF zealots like RMS are a bunch of douchebag nerds with a selfish, aggrandized sense of what is important for society, based simply on their own personal values and desires, and not other people's? (Hint: yes.)


As the FSF lives on, I suspect many FOSS enthusiasts still don't fully understand the depth of the FSF ideology. For example, not that long ago, when RMS criticized Steve Jobs and his work, shortly after Jobs death, a lot of people were affronted by this. They said Stallman shouldn't have made such comments, that it hurt the Free software cause, etc. . But these people were being naive, and were fundamentally failing to understand the ideology of the Free Software Foundation. In the view of those that subscribe to it, Steve Jobs life's work has been a *substantial malignant influence* in the computing world, not a good one. So in that light, Stallman's criticism makes perfect sense.


In part, these are the people I'm trying to get my point across: The FSF sympathizers, who are not full-blown backers its ideology, but rather they just "kinda" support the FSF's efforts, because it helps bring more FOSS into the world. I'd like to see more of these people stop cajoling to the FSF and FSF backed projects. Because even just within the context of the FOSS world, the FSF can be problematic: it is unwelcome not only of proprietary software, but also of other Open-Source software and projects that do not fully cater to their ideology. The most nefarious consequence of this, is when open-source development effort gets split in two competing projects, one GPL, the other one not.

I reckon the first time this happened in a big way was Gnome vs. KDE. Likely the most well known case, it's certainly something that hampered the development of Linux-as-desktop-OS quite a bit. Still does today. Maybe not so much with regards to Gnome/KDE specifically, but the GNU zealotry still impacts other aspects of Linux. As a quick example, Ubuntu, being based on Debian (a Free software only distribution), derives its package system mainly from what the Debian maintainers provide. As a consequence, as of this date, no Java 8 package is available in the official repositories and is unlikely there will be one soon (see this email for reference). And that's even though the OpenJDK is Free software, and Java 8 being out for several months now. I suspect this is because the Debian maintainers see the Java scene as pro-corporate, pro-proprietary software, and therefore are hostile to it. I didn't seek to confirm this though - honestly, I gave up on Linux a long time ago (But that's a whole different topic...).

What I do follow, and care about, is the toolchain ecosystem of programming languages: compilers, debuggers, code analyzers, profilers, etc.. And here there is another big duo of FOSS projects battling it out: GCC and LLVM. It used to be that GCC was the king of the scene (as far as non-commercial C compilers go), but gradually LLVM picked itself up, and is now a very mature project, beyond merely the use case of Clang in OS X. For example, Rust and Crystal are languages with compiler toolchains primarily based on LLVM. Some, like Rust, have the potential to gain a lot of traction.

So, I hope more languages follow suit, and have compilers based on LLVM, not GCC.

But even if that happens, that applies only to compilers. There is still the issue that the use of the GDB debugger is prevalent. LLDB has also come a long ways, and even has work being done to support the Visual Studio debugging format natively, whereas the GCC/GDB project doesn't even provide binaries for Windows[3].

This, of course, is completely natural for a project that is hostile to non-Free OSes (OS X only being supported because it's POSIX compliant). One shouldn't expect any other attitude, which is why it's better to favor a project like LLVM that does aim to support all major OSes, proprietary or not. But the problem here, is that even with a mature LLDB, we are still stuck with graphical debugger frontends that only support GDB - Eclipse CDT being a prime example of this (especially for me). I wish quality debugger frontends for LLVM were developed (not just for Eclipse), so we could give good riddance to GDB, and then perhaps the whole GCC toolchain. But I fear that time is quite far away...

So, in conclusion, if you agree with these thoughts, show your support. When you contribute to FOSS projects, prefer permissive Free Software licenses, as opposed to copyleft ones like the GPL. When choosing projects to use (for example Linux distros), prefer those that accommodate permissive licenses. And voice these points if the issue comes up in discussions.


[1] - Yes, maybe some technical differences too, but I reckon there is a likelihood these could have been reconciled, if it wasn't for the licensing disagreements.
[2] - Yes some of these social issues only apply in a significant way to the USA, but John Sullivan is based on the USA, so I think it's valid to mention them.
[3] - And Cygwin's GDB doesn't work that well either. Rather on Windows one should use Mingw-w64 or TDM-GCC. So, alternatives are available, but they do have limitations.

*EDIT*:
[4] - Ok, so the point on copyright for non-software is addressed here: http://www.gnu.org/philosophy/misinterpreting-copyright.en.html. I disagree with several of the premises and assumptions in that article, but even setting those aside, it states: "But it may be an acceptable compromise for these freedoms to be universally available only after a delay of two or three years from the program's publication." - which from my understanding, essentially states that it could be acceptable for commercial software to exist, as long as it does so only with a relatively short copyright life span. This pretty much seems inconsistent, if not downright contradictory, with the FSFs stance as exposed in other articles.

Tuesday 11 August 2015

For me, one disadvantage of short release iterations...

TL;DR: Short release iterations don't really make it practical to give silly nicknames to the releases of the FOSS projects I develop...

So, I'm sure every professional developer has heard of the benefits of short release iterations and all that (one of the aspects of agile development). I fully agree with said benefits, but on a personal level there's one tiny, silly disadvantage:

If you do short release iterations, then you never or rarely do a big release, and as such, you rarely get to give a big release a "nickname". ;P
Sure, this doesn't even apply to most software development scenarios... really, mostly only if one is developing applications (as opposed to libraries), and doing so in the open-source world. It's a fun thing I like to do once in a while - a way to put a small reference to something personal (a hobby or a fandom), in an otherwise purely technical or professional product.

In some cases, a developer does this by naming the project itself for the thing they like. I did this originally with DDT. DDT wasn't originally named DDT, but rather "Mmrnmhrm". No, that's not random typing on the keyboard, it's the name of a space-faring race in the amazing game Star Control II! :) But... as the project matured, I wanted it to be taken more seriously, and so it needed a serious name. And I didn't choose any other fandom reference either because I wanted Mmrnmhrm to be named in the same style as JDT or CDT. So that was that, and "DDT" was the obvious new name.

But since I continued doing so much work on this project (and nearly entirely pro bono), I still wanted to put some references once in a while, a bit of the inner geek spilling out. For some time, I did so whenever a big release was out, but as the project evolved, those became more and more rare. I mean, I always tried to do short release iterations, but sometimes a large feature cannot be broken down in smaller chunks that are actually releasable to the user. One such example, was re-writing the D parser from scratch (and adding comprehensive tests). That took quite a while. So while internally that task was still broken down in small iterations (say, a grammar rule each time), it was only fully releasable when the whole thing was complete. Until then, the older, deprecated parser was used.

But such big releases are very rare nowadays. And it doesn't feel quite right to name your release "Valar Dohaeris" or something as epic as that, if it's mostly a simple release with only some bugfixes and some minor new functionality. That said, I couldn't help but name "Candy Kingdom" the DDT/Goclipse/RustDT releases of this month, as they all share a similar big chunk of work. But I doubt that will happen again very often...