话说,讨论政治太敏感,谈谈金融怕没证。说说家长里短,日常认知,太碎嘴。想来想去,还是,准备开篇做个话题,认真谈谈如何从0开始编译Linux吧。
后面,大王会将此称为炼丹。炼丹过程极为复杂,不但讲究原料,还讲究步骤、火候,甚至丹炉也很重要。
大王历时近一年,踩了无数的坑,终于能拿出可以跑的Linux了。期间查阅文档数千,所学关键书——Linuxfromscratch.org的LFS和BLFS,也是前前后后,翻了三个版本数十便,终于能够学习的勉强走路了。
首先解答几个问题:
1、为什么要自己从0开始编译Linux。
答:首先,是因为兴趣和爱好。其次,个人认为这是国内软件行业的空白。国内软件行业喜欢做应用软件,而不喜欢做底层工具。底层工具是行业支柱和基础,我辈不为,更待何人。
2、是选择拿现成的发行版改改皮肤,还是从头开始?
答:选择从头开始。在研究编译Linux期间,大王曾经研究过如何兼容debian的应用库的问题。根据开源项目debianfromscratch,编译出了一个debian后发现,如果兼容它,你就得让整个软件环境必须和别人一模一样,如此就会让你失去自我,变成另一个版本的debian,而这并非所愿。经历了这么一番痛苦的折腾之后,还是选择了暂时不考虑兼容deb或rpm的软件库,而是从源代码编译构建linux。
拿个发行版,改改皮肤自然可以快速构建出新的分支。这是一种简单,而且行之有效的方法。优点是底层软件经过验证,兼容性好,软件源丰富。缺点也很明显:如果上游出现问题,比如试想debian、ubuntu,或者fedora基金会无法运营下去,或者网络上不通了,那么下游项目就会死掉。
从头开始的缺点是:整合困难,技术难度大,测试量要求极大,前期(1-3年)用户体验糟糕,软件兼容性不佳,软件源构建难度高。当然,优点也更明显。显然,我们可以构建一个真正属于自己的上游系统,还可以按照自己的需要进行系统裁减,在用户习惯和体验改进方面,也有更大的可发挥空间。同时,也可以更好的激发国内开源软件产业的进步。
3、国内开源软件的问题?
答:这个问题讨论起来会有些敏感,也会得罪不少人。不过,还是要说,并希望各大厂能够看到。首先,各大企业对开源软件参与度不够。其实,开源软件就是需要依靠各大公司都投点钱,组建不同的基金会,用来开发和维护开源软件。各开源软件组织得以运转,并将产出提供给各大厂作为底层应用,以便构建更高级的应用软件。这是一个良性的循环过程,而显然国内暂时还缺少这一氛围。要么,大厂直接开源自己的软件,而别家不敢用。要么,很多不错的开源项目得不到资金支持,而不得不变成僵尸。
其次,国内开源项目复用率较低。这不但体现在国内的应用中使用较少,还体现在诸如Linux这种大型操作系统级别的软件上,也较少使用国内的开源项目。比如,我们就不曾见到各大开源系统上,有国内的知名项目。这可能是上一节所述问题导致的结果,也可能是本身我们自身付出太少,我们自己引用太少的缘故。
再次,则是开源环境的问题。我们缺少像样的开源社区,缺少原创的开源项目入驻。同时,还面临着各种莫名其妙的“无知用户”和“专业人士”的不良评论。最常见的问题,就是对国内软件的小毛病说三道四,而对外国软件出现系统崩溃却置若罔闻。
其实,翻车无处不在。我们需要更多的包容,来支持这些默默付出的人们,给我们的巨大贡献,而不是简单做个喷子。此处,非常感谢广大开源社区的贡献者,感谢家人的支持。
4、我也想炼丹,我该准备些什么?
答:首先,你需要一个性能不错的丹炉。它最好有N(N最好不小于6)个以上的线程,和N*2GB的内存。
其次,你需要大量的时间投入,能够让你的丹炉在性能全开的情况下,连续工作5个,甚至时数个小时。
再次,你的意志必须坚强。因为炼丹会经常失败,你需要足够的毅力去面对失败,并有足够的耐心去发现问题和解决问题。
第四点,英文还是要懂一点的,最好是过了6级。
第五点,编程基础知识还是要有的,最好是玩C和C++一两年以上的老手,入手更佳。
第六点,本着“凡事都要靠自己”的心态来炼丹,各种小事指望别人给你帮助在炼丹时,是行不通的。炼丹的过程没有怜悯,没有情绪的,有的只是结果的成、或成色与失败。
好了,洋洋洒洒千字,也将收尾。后即大王将会开启相关的系列文章,欢迎大家加入讨论,一起炼丹。