一直在思索,思索怎么更好地学习GNU,更好地学习自由软件;思索GNU的本质,以及其本质所带来的创意。
岁末,灵感给了我最好的礼物
0) GNU本质
GNU=源代码+自由软件哲学
1) 最新源代码
GNU学习的一个基本命题是,“下载一个最新的源代码,如GCC,EMACS,KERNEL,GNOME,你自己能编译安装吗?”
因为对自己未来的定位是开发人员,不是普通用户,所以不想太依赖于发行版所提供的二进制安装包和软件版本依赖关系的解决方案。
下载一个源代码包,然后编译安装,研究学习。这是自由软件用户最常做的一件事。
最常做的事情,我以前却很少去做,是因为没人提醒我这点吗?
一直在寻找正宗的真正的GNU系统,现在才发现他一直都在我身边,他简单朴素得只剩一句话,“下载自由软件源代码包,然后编译安装”
2) 下载多个不同版本的源代码
你有这种习惯吗?下载同一款程序的多个不同版本的源代码包。
这是自自然然的事情。
比如,你要编译安装gcc,由于库的依赖,你下载了多个不同版本的gcc,glibc,binutils,linux,linux-libc-headers,glibc-linuxthreads来尝试组合。
比如,你要学习源代码,由于最新的源代码过于庞大,为了更好地理解,快速入手,你下载了早期版本的源代码包,直到定位到某个适合你的版本。
比如,你好奇,想了解这款程序的历史,这款程序的演化过程。通过下载多个不同版本的源代码,你渐渐熟悉程序作者的成长过程,指导你以后发布自己的自由软件项目。
以cheese为例,在学习多个不同版本中发现了不少趣事。
第一个版本 0.1.0:
没有configure文件,只需运行一个编译命令"make"。要求用户亲手复制desktop,glade文件到指定的路径。
版本 0.1.1:
这个版本在README里添加了句雷人的话,“编译的依赖关系: 需要gtk+2.0 libglade2.0 ... 一个脑袋?!!”,证据如下
$ cat ~/source/cheese/cheese-0.1.1/README ... Requirements: - gtk+ 2.0 - libglade 2.0 - gstreamer 0.10 - gstreamer-plugins-base 0.10 - gstreamer-plugins-good 0.10 - gnomevfs 2.0 - gdk 2.0 - glib - cairo - a brain ... |
版本0.1.3:
cheese的早期版本没有使用autotool,它使用的是toc,看看用toc制作出来的configure文件是长什么样的,很好玩:)
运行./configure命令,显示如下
张开嘴的表情
:-O gtar :-O /home/c-aries/source/cheese/cheese-0.1.3/toc2/make/TARBALL.make |
微笑的表情
:-) Found gstreamer-0.10 >= 0.10.12 :-) Found gstreamer-plugins-base-0.10 >= 0.10.12 :-) Found gnome-vfs-2.0 :-) Found cairo all ok :-) |
版本2.23.1:
我现在找到的,适合我学习的版本,ogv视频录制没有问题。
另外,在比较gcc多个不同的版本中,摘录如下:
Wed Jan 16 15:34:38 1991 Richard Stallman (rms at mole.ai.mit.edu) * Version 1.39 released. |
此时的linux内核0.01还没发布,编译gcc需要指定系统平台为参数,如sun386,mips-sysv
看得我胆颤心惊!
我还找到我出生时,1988年的gcc代码,那时stallman大叔正坚守着他的理想,编写着gcc-1.23,那时,梦,才刚开始没多久
梦,才刚开始
相关资源
1. 自由软件历史的学习 Free as in Freedom
http://oreilly.com/openbook/freedom/
时间:2010-01-03 14:03
来源:Linuxeden
作者:c-aries
原文链接