I apologise if this question is out of topic, but it is simultaneously an economy and a programming question. If it should go to another SE communality, please indicate me.
In theory, GNU software is entirely developed by volunteers during their free time, or by companies that voluntary fund programmers to develop GNU software (by using income from another sector of their activity).
I understand how it can work perfectly fine for small-scale project that can be done in a couple of rainy weekends by a single individual (let's say for example a sudoku game), because after all computer programming is an extremely fun and rewarding hobby, and I have no problem seeing people developing small or medium programs during their free time and sharing them to the world.
The problem is that this scales extremely poorly for larger programs for the following reasons:
- As fun as programming is, as the project that have to be implemented becomes larger, the time it takes to implement the desired functionality grows extremely quickly. A larger scale program takes an incredible amount of time to develop, for instance it could easily take 15 years of free time and vacation time for an individual to program an operating system, and by the time his software is released it'll be completely obsolete.
- As other people write programs in another way that the way you would have done it, reading and understanding someone else's code takes a lot of time, in most cases as much as would writing your own code from scratch. Modifying another people's code and try to improve it, as it is encouraged by the GNU philosophy, is almost just as time consuming as developing your own clone of the said program with the functionality you'd like to add.
- As soon as 2 or more people will have to collaborate to develop a larger program, this creates lots of decision-taking issues that would never arose on a single-developer project. The result is that, for example if a group of 2 programmers collaborate for a project that would take 10 years for a single man to make, they won't make it in 5 years but probably in 8.
- If people that collaborate for the same project meets on the internet solely, it is easy for one member of the project to vanish suddenly (either because he lost interest or because he physically can't be on the internet anymore), thus making collaboration even harder
So, while I understand perfectly how simple programs can be developed with the GNU mindset, I absolutely don't see how such huge programs such as GNU/Linux or gcc are possible on this model. gcc is around 7 million lines of code. I know lines of code does not mean much, as in a later stage of a project the more productive programmer is the one that will actually remove lines of code (simplifying and/or optimizing the project), but this gives an overwiew how massive of a project gcc is.
So in theory, anyone can freely modify gcc during their free time, but in practice? It was developed by very professional people as a job, not as a hobby. Anyone making a compiler as a hobby will eventually give up as the cost/benefit is not worth it:
- Developing a large program is such a long term huge project, they'd rather use their free time to have other activities that are more rewarding or more enjoyable in the short term
- If they were to develop a large program anyway, they'd rather do it for a company that will pay them than doing it for free
In order to get people interested at developing a program such as GNU/Linux, gcc or Open Office in the long run, it should be rewarding. So my question is: Why is there people contributing to large GNU project, if they aren't getting a salary for it?