我是抱着玩的心态开始用电脑的。自从家里有了电脑之后,我就想方设法抓起鼠标和键盘打一会儿游戏。《金庸群侠传》《仙剑》《星际》《盟军敢死队》,这些老游戏都玩了个遍。父母担心我沉迷游戏,一度没收了我的鼠标和键盘。总之,当时的电脑只是个娱乐平台。
那个时候已经在提“20世纪是计算机的世纪”。好莱坞电影开始把黑客塑造成孤胆侠客。我经常抱着《电脑报》或《大众软件》,幻想着自己成为一名侠客一般的计算机高手。但对于一个内地小城的孩子来说,深入接触计算机技术的机会很有限。我曾经很认真地找了一套计算机等级考试的书看。把二进制运算、SQL命令、QBasic语法都记得滚瓜烂熟,却因为装不好编译环境,最终没能写出一个可以使用的软件。后来读那些顶级黑客的传记,讲他们从小如何如何编程,一直很好奇他们是如何度过环境搭建这个难关的。后来发现,这些人都有机会接触一些编程高手,所以在他们的眼里,根本不认为这是太大的问题。
上大学时,我选择了物理专业。物理专业做数值模拟和数据处理,C语言和Fortran语言编程也是必修课。有了大学里的资源,编程环境的搭建变成了小菜一碟。只是自己的电脑太过老迈,动不动就要死机。朋友们呼啸着打Dota时,我却在为Word触发的蓝屏头痛。相熟的朋友看不下去,扔给我一张光盘,要我重装Ubuntu系统。Ubuntu是当时最流行的一个Linux版本。死马当活马医,我安装了光盘上的Ubuntu。系统装好了,电脑死机的次数大为减少。不过Linux下的图像化界面确实和Windows有差距,办公软件也比不上Office。我戚戚然地把Linux当作低成本的二等方案。但无论如何,当时正值我做“大学生研究计划”,运行稳定的Linux还是救我于水火。事后请朋友吃饭,问朋友哪里来的光盘,才晓得Ubuntu的安装光盘可以免费领取。
更让我刮目相看的是Linux下的软件分发。那个时代还没有苹果App Store这样的东西。所谓的在线软件分发,就是上网下载exe安装包。用了Ubuntu之后,我需要的软件基本都可以在软件源中找到。在终端输入一行命令,编译环境就搭建好了。我不用担心病毒,而且大部分情况下也不需要付费。再加上学校里有Ubuntu镜像,下载一个软件往往只需要几秒钟。于是,探索Linux下的软件成了我的一大业余爱好,我渐渐习惯了用ImageMagick来做图片处理,用FFmpeg来转换视频,用Wget来做网络下载。这些基于命令行的应用软件,再搭配bash的批处理功能,往往能实现强大的复合功能。
我也越来越享受Linux系统提供的编程环境。在写C语言和Fortran语言作业时,我就开始用vim编写自己的作业,用GCC和GFortran来编译,再用GDB来调试。这个过程要比Windows下的IDE麻烦。但当接触其他语言时,相同的工具可以复用,不用每一次都花费大量时间来熟悉全新的IDE。后来在Linux下学习Python语言时,很容易就可以上手。如果说编程是去游乐园,那么Linux为入园玩耍提供了直通车。想起小时候为编译环境苦恼的自己,真想穿越时光送去一张Ubuntu的安装盘。
我觉得对于一个电脑爱好者来说,Linux最美的地方就是开放。Linux的开放可以分为多个层面。软件层面是开放的,用户可以免费使用。文档也是开放的,你可以在终端下用man命令方便地查询。操作系统是开放的,你可以自由地调整系统,也可以深入了解其原理。代码上亦是开放的,你随时可以看到世界上顶级程序员写下的源代码。在Linux系统下,“实现”和“如何实现”是合二为一的。吃鱼的同时,钓鱼的本事也可以学到。因此,Linux提供了一个绝佳的学习平台。
后来,太太送给我一部树莓派做生日礼物。我惊喜地发现,树莓派使用的操作系统正是Linux。更棒的是,树莓派的底层硬件也很开放。它可以方便地通过有线或无线的方式和硬件外设进行连接。它对使用方式没有太多限制。于是,在后来的智能硬件创业项目,我总是在研发版本中使用树莓派。无论是作为硬件的树莓派,还是作为软件的Linux,都遵循了相同的规律:开放战胜了封闭。知识的共享带来更加活跃的创造力,也给社会带来协同合作的机会。
几年前,我读到印度的一个公益项目。这个项目募集旧电脑,在电脑上安装Linux系统,再发放给贫困地区的儿童使用。这个项目给孩子们带来的不止是欢乐,还改变了他们的命运。当树莓派发布的新闻出来时,我想到的就是这款微型电脑的社会意义。后来读到树莓派之父厄普顿发明这台小电脑的初衷,果然也是教育。我由此确信,有很多人和我抱着相同的见解。
如今,“科技取代人类”的言论甚嚣尘上,很多人对技术霸权顶礼膜拜,对人类的未来充满绝望。其实,科技本身是中性的。科技可以取代人们的工作,也可以帮助人们更好地就业。像树莓派和Linux这样的技术,尊重了用户本身的创造力。它们用一种开放协作的态度,提高了社会的温度。我也一直抱着这样的理念,坚持在博客上分享自己的所知。我还记得自己在探索计算机时无路可循的尴尬。即使是出于简单的同理心,我也希望自己的分享能帮助任何一个在门槛上抓耳挠腮的学习者。
借着这股心劲,我克服了写作的羞涩,投入到这本书的写作中。我希望这本书能以树莓派硬件为平台,全面讲解Linux原理。全靠昕梓的通力合作,我才能顺利完成这个野心勃勃的目标。杜鹃、陈思为帮我审读了全书,提出大量的修改意见,让书稿变得真正可读。安娜会在关键的时候给我们提供任何所需的帮助,全程引导了写作过程。最后,这本书还要感谢上海的地铁11号线。全靠这班地铁上的空座位,我才能坐着写出大部分文字。
在设计本书内容时,昕梓和我决定尊重读者,不避讳艰深的内容。毕竟,树莓派本身只是一个入口。这个入口的背后有着丰富的操作系统知识。无论是编程,还是深入理解计算机,一定深度的操作系统知识都不可或缺。我们会从树莓派的基本使用讲起,一直深入到操作系统原理本身。在后面一部分,我还加入了基于树莓派的实践项目,希望能抛砖引玉,激发用户的创造力。当然,篇幅所限,我也不得不舍弃一些细节。但我相信,只要体验到边玩边学电脑的乐趣,那么其他技术的掌握也都可以沿着相同的轨迹重复进行。
那样的话,这本书就没有遗憾了。
本文为《树莓派开始,玩转Linux》一书前言