创建自定义操作系统的障碍

19

在我看来,程序员(特别是计算机科学毕业生)最常尝试着去完成的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言+编译器可能更为普遍,但远没有这么雄心勃勃。)

对于那些像我一样愚蠢地尝试的人:除了纯粹的规模以外,在从头开始创建你自己的操作系统时,你遇到的最大陷阱或意料之外的障碍是什么?

编辑:一个很好的操作系统问题:有哪些入门操作系统开发的资源?


以前创建自己的文本编辑器也很受欢迎。 :) - unwind
3
我认为最大的障碍是恐惧和怀疑。如果你能消除它们... - THEn
6个回答

21

从实际经验来说(AROS),最大的障碍有:

  • 鸡生蛋问题(没有操作系统->没有应用->没有用户->不能吸引开发者)
  • 为什么要试图与Windows竞争?苹果有很多钱也没有成功,Linux尽管拥有庞大和热情的社区,但也没有成功。
  • 大公司根本不感兴趣将其应用程序带到你的操作系统上(Adobe Acrobat Reader、MS Office、Macromedia Flash、Sun的Java)。如果没有这些应用程序,也没有好的开源替代品,你就无法吸引用户。
  • 需要很长时间。在我的情况下,大约花了15年才推出1.0版本(我们还没有完全做到)。
  • 兼容性。为了获得任何用户,你必须与现有的某个操作系统相兼容(这样人们可以继续使用他们的数据等等)。如果你兼容了,为什么要改用你的操作系统呢?

因此,如果你计划编写自己的操作系统,你应该考虑以下事项:

  • 需要很长时间
  • 在最长的一段时间里,你将孤军奋战。我很幸运,因为我有这个极度狂热和专注的Amiga社区,他们从不放弃。
  • 你必须找到一个可以提供其他操作系统无法提供服务的利基市场。
  • 能够做到这一点的人通常会得到更好的工作机会,因为人们认为“编写操作系统很难” :)
  • 你将成为一个非常小而精英的程序员团体的成员,他们可以说“我编写了自己的操作系统,并且它可以做更多的事情而不仅仅是打印‘Hello world!’”。

3
“Apple doesn't succeed”? 他们每年赚数十亿美元。这听起来非常成功。 - Bryan Oakley
3
他们刚刚获得了10%的市场份额(http://www.tuaw.com/2009/01/02/apple-market-share-tops-10-windows-share-lowest-since-tracking/)。这是一大笔钱,但他们肯定不会接管。所以,在他们的利基市场上,他们很成功。总体而言,他们并不能对Windows巨头构成威胁。我们必须等待它自己的重量压垮它;) - Aaron Digulla
除了纯粹的大小之外,还有任何特定的技术挑战吗? - mudgen
4
@mudge:为操作系统编写驱动程序很难:很难获得规格,您需要购买硬件来测试驱动程序,编写驱动程序非常困难(例如调试中断),而且您需要相当多的驱动程序。 - Aaron Digulla
@AaronDigulla 我很想看到Windows在自己的等待下崩溃。 :D - Adam Oates
1
@DorkFace 数十亿美元构成了支撑它的支柱... - Aaron Digulla

9
曾经历过,做过那些事情。对我来说,最大的障碍是设备驱动程序。编写操作系统内核是“有趣的部分”,但如果不能进行I/O(磁盘、键盘、视频、网络等),则毫无用处。今天,如果我再次有时间和意愿参与这样的项目,我可能会选择针对Xen VM而不是原始硬件 - 如果仅仅因为它隐藏了x86的许多丑陋特性以及硬件问题。 Xen呈现出一个漂亮的统一、硬件无关的I/O设备视图,并且仍然给你足够的自由去玩“有趣”的操作系统部分(mm、进程管理、同步、中断等)。

是的,我卡在这一点上了,即使这是我的第一次:c - u185619

5
最大的障碍?我认为是当你发现规范中有多少间隔和各种实现中有多少漏洞时。
说实话,即使你拥有所有组件的规范(例如USB,DMA,IRQ,您的CPU...),你会发现a)某些事情没有被规定(例如,如果您向USB设备发送某个序列会发生什么)和b)有些事情只是有缺陷的,你需要解决它们(例如,CPU中的几十个错误,在CPU勘误表中详细说明,Intel和AMD都发布了这些错误)。
我不知道现代操作系统中有多少错误的解决方法,但由于Linux和*BSD是开源的,它们的驱动程序告诉您很多信息,例如这个。并且预计会出现一些严重的负面影响,例如这个
所以,是的,如果您尝试编写操作系统,请准备好对硬件制造商进行咒骂,并开始失去对现代PC质量的信心 :-)

准备好了吗?开始对现代个人电脑的质量失去信心吧!毫无疑问!这让我想起了一句话,大意是:如果你不想看到一个破绽,就别深入代码。也就是说,一旦你了解了更深层次的内部结构,你会发现它们是多么拼凑而成的。 - Dinah

3
我认为现在很多优秀的程序员不知道自己对计算机工作原理的了解有多少欠缺。如果想要让一台机器从磁盘启动你的操作系统,你需要对基础知识有着扎实的掌握,而这种类型的知识现在已经相当稀缺了。现在也不会再有一整个书架都是关于这方面的书籍了。
有趣的是,几周前我在SO上问了一个问题,涉及到了10-15年前严肃PC编程的基本知识,而其中一位评论者说他认为那是一个“硬件”问题。
我并不是在抨击他们,但我认为这反映了技能的变化是非常有趣的。

2
我认为最大的障碍是用户 - 直到你建立了大部分工作系统,你很难有任何用户。没有用户,你就没有功能请求、错误报告,因此也就缺乏动力。然而,即使你建立了一个工作的操作系统,也不能保证你会得到用户群,除非你能找到一个吸引人们的钩子 - 什么让你的操作系统与众不同,让人们愿意尝试测试版,在几乎没有任何可用应用程序的情况下坚持下去等等。
你可能会对 SkyOS 感兴趣 - 它主要由单个开发者(现在是小型开发团队)开发。维基百科文章 也有一个很好的总结。我认为这是一个很好的例子,说明如何承担如此艰巨的任务并取得不错的成果。他们在 SkyOS 上做了一些有趣的事情,尤其酷的是看到这主要来自一个人在业余时间的努力。

0
编写操作系统面临的问题与其他大型软件项目相同。它缺乏明确定义的目标,由于缺乏经验而存在时间表/估算问题。此外,对于程序员来说,首先创建一个类似于“hello world”的操作系统将非常有用,这样他/她就可以学习操作系统开发背后的概念,然后可以专注于开发操作系统(而不是学习操作系统概念)。

我认为这更难,因为没有库函数等。你需要从头开始做所有的东西。 - skywalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接