OSNEWS中文版重点推荐:业余操作系统开发第二部分:设定目标和期望

你完成了测试并且已经着手操作系统开发了吗?在这一点上,许多操作系统开发爱好者都试图寻找一份简单的step-by-step向导来引导他们编写一个二 进制启动文件,做一些文本 I/O,和其他“简单”的东西。但是所隐藏的规划或多或少应该遵循:任何时候他们都要考虑他们的想法应该很容易实施,并且他们会实现那个想法。逐渐地过渡 到功能,他们的操作系统将可能建立的功能,然后慢慢超越。在我看来,这不是抵达某个阶段最好的方式(如果抵达某个阶段是你的目标)。本文中,我要解释为什 么,以及你在这个阶段应该做什么。

设计的重要性

首先,严重依赖教程有碍创造力。 通常我们没有完全理解冗长的段落描述我们正在做的事情,往往更多的是盲从, 忽视了作者在这个实践中提到的大大的红色的警告。这样我们得到了什么?网上许多低级向导主要介绍了如何用C建立一个单一内核和简单控制台的UNIX克隆。 想起什么了?那很正常,我们已经有很多教程了。在我看来,在操作系统开发上花了所有时间却得到一个没有现存硬件支持,只有非常有限地硬件支持的类UNIX 内核是十分悲哀的,虽然你可能不这么想。

不要遵循这个方法的另一个理由是这会让我们的目光短浅,思维固定在这个套路上。有一些陷阱我们 是可以先通过一段时间的规划完全避免掉的。简单来说: 异步 I/O和多进程。从本质上讲支持那些并不难,给一些足够的相关文档即可,如果你决定及早使用它们并且坚持下去。这就是一种不同的思维方式。但是,如果没有 这些思维就试图以后将它们添加到代码库,那么转换过程将十分痛苦。

最后,为什么我认为那种设计对业余项目很重要的最后一个原因是他们的团 队比较小。通常是一个,或者二个开发人员。 这未必是一件坏事:在操作系统项目的早期阶段, 你通常不希望无休止的争论,不希望很多人用不同方式编写很多代码段。然而最明显的缺点是除非你只关注有限的东西并且尽力做好,否则你想靠自己一个人的力量 的想法就是错误的。 这就是为什么在这个阶段你应该不是编写代码,而是确定项目目标,你想去哪里。

首先,忘掉你针对的是一个特定计算机, 甚至是你正在编写代码。你,作为只有1-2个人的团队,或许是更多人的团队成员之一,将给其他人(可能仅仅是团队的成员)提供的一些东西。一切都从这里开 始:你要提供的这种服务是什么?何时你可以说你的项目已经成功?何时你可以说你已经偏离的轨道?要在业余操作系统项目上取得成功,与许多其他类型的个人项 目一样,第一步是把定义清晰。
探索动机

所以不要犹豫,拿一张纸或者一些文本储存空间(我的是一个博客),然后探索你的动机。如果 你正在编写一个操作系统是因为你对你了解的现有操作系统有些抱怨,那么花费一些时间找出你不喜欢的地方。试着理解为什么它们是这样,探索其时间上的演变, 可能的话阅读这方面的书籍。即使证明只是一个随机的选择,你也应该找到一些东西:不这样随机选择的重要性,并特别留意其设计。如果你编写一个操作系统是为 了学习一些东西,那么你要尽力确定你想学习什么。可能你想知道程序抽象化来自哪里? 通过什么样的过程完成一个交互,让一个复杂的,不能说话的电子设备完成一些’可以被高层次的学历的人‘使用的东西?

在所有情况下,你都应 该尽可能多地做笔记,这样才不会干扰你的思维过程。这样做有两个原因:首先之后你可以回顾笔记,然后如果你坚持模糊的想法,甚至于他们都不能用英语(或者 你可以流利的表达的语言)表达,那么这会强迫你将这些想法翻译成文本,比你所想的更精确。如果这些笔记要发布或者被你没有考虑到的人使用的话,你要尽可能 让你的想法精确化。
确定目标观众

确定了为什么你这样做后,你可以尝试快速确定你的目标观众是什么。操作系统是一个介于硬件,最终 用户和第三方软件开发者之间的接口,所以你必须定义所有三方到一定程度:操作系统运行的硬件是什么?谁使用?谁为它编写软件,软件类型是什么?这个阶段您 不必过于精确,但是此时你必须要决定一些东西。

硬件方面:你至少知道用户怎样与硬件交互(键盘?指示设备?),你想覆盖的屏幕取在哪个范 围,你针对的最老的CPU功率多少以及需要保证多少内存? 你可能也要立即知道如果你的操作系统需要适当地连接网络操作,你将使用什么样的海量存储设备, 将怎样安装第三方软件(如果有)。

快速检查你想为其编写代码的硬件类型是自制友好的(homebrew-friendly)。许多台式 机和笔记本是自制友好的(可能即将到来的 ChromeOS上网本是个例外),视频游戏控制台是一个混合包(任天堂的控制台一般是,其它通常不是),来自苹果和索尼的产品直到他们过时也不是自制友 好的。对手机我要提醒一句:虽然它们可能听起来是一个可以为其编写代码的平台,但是它们的硬件一般是记录的非常糟糕的,你应该在脑海中保持这一想法,甚至 当你找到允许自制操作系统运行,并且在网络上有充足的文档可用的这样一种平台的时候,下一代平台也不能保证提供这些让你觉得舒坦的文档。

最 终用户可能是最难准确确定的一件事情,当开发人员只顾自己时除外。你或许应该继续围绕大量代表你想针对的那类人的描述。一些例子:在圣诞节,一位 70岁 的老奶奶获得了一份由孙子给予的礼物,她之前从未用过电脑。这时应该特别注意她的视力问题。一位长着胡须的40岁的老公司网络系统管理员不会使用计算机, 如果你的系统在CLI模式中不能用类BASH语法操作。需要批处理许多任务是他的工作,想想强大的脚本引擎。需要多用户支持和一个特定账户限定他的权限。 20岁的经验丰富的富有创造力的女孩使用 数位板和不同的软件画画。一个计算机是一个工具,就像其它她是用过的工具,你的系统作用不会超过一张纸。

第 三方开发人员:首先要注意的是,如果你想让他们某些时候对你的项目感兴趣,你首先要吸引他们成为最终用户。人们不会为了一个他们不想使用的平台编写代 码,除非他们能获得报酬。 换句话说,开发人员有着特殊的地位,更直接说,他们创造了软件。因此你的任务之一是确定你让他们开发什么软件。

让他们为你编写从操作系统的必要部分(通常发生在FOSS桌面操作系统世界)到每个软件和第三方软件开发是不现实的(这已经过时,除了在一些嵌入式范畴)。在这些极端情况之间,有一个广泛的可能性。比如这几个:

*操作系统部分的设计/管理是专有的,而且公开规范是为了方便第三方开发人员能实施或者重新实施他们需要的部分。

*大多数操作系统本身是一个专有和未公开的方式 ,但是你要开放第三方驱动程序和低级别的工具(Windows 9x,Mac OS)。

*与上述方面相同,但是你要求程序需要访问一些低级别或者其他危险的功能审查一些批准或者签名程序(最近的Windows版本, Symbian)。

*你不容许第三方低级别的应用程序,并会尽一切所能阻止他们的存在, 但是你为用户应用程序提供一个本地开发包,可以慷慨地访问系统API。

*同上,但是本地第三方用户程序被视为危险的,而且必须通过一些签名/批准过程 (iOS)。

*没有本地第三方应用程序,一切都通过管理应用程序限制访问系统功能(Android, Windows Phone 7,大多数功能手机)

有了这些信息,你的脑海中应该会拥有一个相当不错的注意,并未下一步做好准备。
目标与展望

想 在,你应该把你的想法放到纸上。描述一下你的操作系统要达到什么要求,比如为谁,硬件情况,谁编写代码,当你能说那个项目根据最初的目标是成功的,那已 经可以发布1.0版本了,可以这样说。通过定义项目的目标,你客观的标砖定义他的成功与失败,证明是一种非常宝贵的资源,因为这意味着避免了功能膨胀和浪 费你非常宝贵的开发资源。

最后,看看这个项目的全局视图,你现在问自己这样简单的问题:“我想我能做到吗?” 如果你认为你应该降低期望值一点点,现在是适当时机,因为以后你将做出更多伤害。有了这些你之前收集的材料,不断磨合,直到你拥有一个满足的项目(或者可 能放弃编写操作系统,如果你不再喜欢它), 然后您就可以进行下一步,也就是设计你的内核。 

转载于:https://www.cnblogs.com/osnewscn/archive/2011/02/13/1953923.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值