如果这个问题超出主题,我深表歉意,但这同时是一个经济问题,也是一个编程问题。如果它应该转到另一个SE社区,请告诉我。
从理论上讲,GNU软件完全由志愿者在空闲时间开发,或者由自愿资助程序员开发GNU软件的公司(通过使用其活动的其他部门的收入)开发。
我了解它对于小型项目的完美工作方式,该项目可以在一个多雨的周末由一个人完成(例如数独游戏),因为毕竟计算机编程是一种非常有趣且有益的嗜好,而且我看到人们在闲暇时间开发中小型程序并将其共享给全世界时,我没有问题。
问题在于,由于以下原因,对于大型程序而言,伸缩性极差:
- 尽管编程很有趣,但是随着必须实施的项目变得越来越大,实现所需功能所需的时间却迅速增加。较大规模的程序需要花费大量时间才能开发,例如,一个人可能很容易就需要15年的空闲时间和休假时间来对操作系统进行编程,而到他的软件发布时,它就会完全过时了。 。
- 当其他人以与您将要完成的方式不同的方式来编写程序时,阅读和理解别人的代码会花费很多时间,在大多数情况下,这与从头开始编写自己的代码一样多。在GNU理念的鼓励下,修改他人的代码并尝试对其进行改进,几乎与开发带有您要添加的功能的所述程序的克隆一样耗时。
- 一旦必须有2个或更多的人协作来开发更大的程序,这就会产生很多决策问题,而这些问题在单个开发人员项目中就不会出现。结果是,例如,如果一个由2个程序员组成的团队合作完成一个项目,一个人要花10年的时间,他们将不会在5年内成功,而可能会在8年内成功。
- 如果为同一项目进行协作的人仅在互联网上见面,那么该项目的一个成员很容易突然消失(因为他失去了兴趣,或者因为他再也无法上网了),因此,甚至可以进行协作更难
因此,尽管我完全了解如何使用GNU思维方式开发简单的程序,但我绝对看不到在这种模型上如何能够实现GNU / Linux或gcc这样的大型程序。gcc大约有700万行代码。我知道代码行没有多大意义,因为在项目的后期阶段,生产力更高的程序员实际上是将代码行删除(简化和/或优化项目)的程序员,但是这给代码带来了很大的负担。项目gcc是。
因此,从理论上讲,任何人都可以在空闲时间自由修改gcc,但实际上呢?它是由非常专业的人开发的,是工作,而不是业余爱好。任何将编译器当作业余爱好的人最终都会放弃,因为成本/收益不值得:
- 开发大型程序是一个长期的,庞大的项目,他们宁愿利用自己的空闲时间从事其他在短期内更有意义或更有趣的活动
- 如果他们仍然要开发一个大型程序,他们宁愿为将向他们付款的公司这样做,而不是免费进行
从长远来看,为了使人们对开发诸如GNU / Linux,gcc或Open Office之类的程序感兴趣,它应该是有益的。所以我的问题是:如果没有薪水,为什么会有人为大型GNU项目做贡献?