19

プログラマー (特に Comp. Sci. 卒業生) が取り組もうとする最も一般的な過度に野心的なプロジェクトは、独自のオペレーティング システムを構築することだと私には思えます。(独自のプログラミング言語とコンパイラを作成しようとすることは、おそらくさらに一般的ですが、それほど野心的ではありません。)

(私のような) 試すのに十分なほど愚かな人のために: まったくのサイズは別として、ゼロから独自の OS を作成しようとしたときに遭遇した最大の落とし穴や予期しない障害は何ですか?

編集: OS に関するすばらしい質問:オペレーティング システムの開発を始めるためのリソースは何ですか?

4

6 に答える 6

20

実際の経験から話すことができること ( AROS、最大の障害は次のとおりです。

  • 鶏と卵 (OS なし <-> アプリなし <-> ユーザーなし <-> 開発者を引き付けることはできません)
  • Windows と競合しようとするのはなぜでしょうか。Apple は成功せず、大金を持っています。Linux は、巨大で熱狂的なコミュニティがあるにもかかわらず成功しません。
  • 大企業は、自社のアプリをあなたの OS に持ち込むことにまったく関心がありません (Adobe Acrobat Reader、MS Office、Macromedia Flash、Sun の Java)。これらがなければ、優れた OSS の代替手段がなければ、ユーザーを引き付けることはできません。
  • 非常に時間がかかります。私の場合、1.0 を取得するのに約 15 年かかりました (まだ 100% ではありません)。
  • 互換性。ユーザーを獲得するには、存在するものと互換性がなければなりません (人々が引き続きデータを使用できるようにするためなど)。互換性がある場合、OS を変更する理由はですか?

したがって、独自の OS を作成する予定がある場合は、次のことを考慮する必要があります。

  • 長い時間がかかります
  • 長い間、あなたは一人になります。私が幸運だったのは、非常に熱狂的で献身的な Amiga コミュニティがあり、決してあきらめなかったからです。
  • 他の OS が提供できないサービスを提供できるニッチを見つけなければなりません。
  • 「OSを書くのは難しい」という認識があるため、これができる人はより良い仕事を提供されることがよくあります:)
  • あなたは、「私は独自の OS を作成しましたが、それは 'Hello world!' を印刷するだけではありません」と言うことができる、非常に少数のエリート プログラマー グループのメンバーになります。
于 2008-12-04T14:40:42.007 に答える
9

そこに行って、それをしました。少なくとも私にとって最大の障害は、デバイス ドライバーでした。OS コアのコーディングは「楽しい部分」ですが、I/O (少なくともディスク、キーボード、ビデオ、ネットワーク) を実行できなければ意味がありません。今日、もう一度そのようなプロジェクトに参加する時間と意志があれば、生のハードウェアの代わりに Xen VM をターゲットにするでしょう。Xen は、I/O デバイスのハードウェアに依存しない均一なビューを提供し、「興味深い」OS パーツ (mm、プロセス管理、同期、割り込みなど) を自由に操作できます。

于 2008-12-21T20:59:25.973 に答える
5

最大の障害?仕様にどれだけのギャップがあり、さまざまな実装にいくつのバグがあるかを知るときだと思います。

真剣に、すべてのコンポーネント(つまり、USB、DMA、IRQ、CPUなど)のすべての仕様がある場合でも、a)いくつかのことが指定されていない(つまり、特定のシーケンスをに送信するとどうなるか) USBデバイス)およびb)バグがあり、それらを回避する必要があります(つまり、IntelとAMDの両方が公開しているCPU Errataで詳しく説明されているCPUの数十のバグ)

現代のオペレーティングシステムにあるバグの回避策がいくつあるかはわかりませんが、Linuxと* BSDはオープンソースであるため、それらのドライバーは多くのことを教えてくれますそして、このような深刻な負の副作用が発生することを期待してください。

そうですね、OSを作成しようとする場合は、ハードウェアメーカーに多くの呪いをかけ、最新のPCの品質に対する信頼を失い始める準備をしてください:-)

于 2008-12-05T18:48:43.453 に答える
3

今日では、他の点では優れたプログラマーである多くの人々は、コンピューターがどのように機能するかについてほとんど知らないのだと思います。マシンにディスクからOSを起動させるには、基本を真剣に理解する必要があります。この種の知識は、最近ではかなり薄く普及しています。最近では、それに関する本の棚も見つかりません。

興味深いことに、私は数週間前にSOについて質問しました。これは、10〜15年前の本格的なPCプログラミングの基本である知識の種類に関するもので、あるコメント提供者はそれをハードウェアの質問だと考えていると述べました。

ノックしているわけではありませんが、スキルがどのように変化したかについては興味深い反省だと思いました。

于 2008-12-05T18:38:28.170 に答える
2

断然最大の障害はユーザーだと思います。動作するシステムの大部分を構築するまで、ユーザーが存在する可能性はほとんどありません。ユーザーがいなければ、機能のリクエストもバグ報告もできず、その結果、モチベーションが制限されます。ただし、実際に動作する OS を構築したとしても、ユーザーを惹きつけるフックを見つけられない限り、ユーザー ベースを獲得できる保証はありません。ユーザーがベータ版を試してみたり、がんばったりするのに十分なほど、あなたの OS を際立たせるものです。そこに移植された動作中のアプリケーションがほとんどない場合など。

SkyOSのチェックに興味があるかもしれません。これは主に 1 人の開発者 (現在は小さな開発チーム) によって開発されました。ウィキペディアの記事にも良い要約があります。このような困難な仕事がどのように行われ、非常にうまくいくかの良い例だと思います. 彼らは SkyOS でいくつかの興味深いことを行ってきましたが、その大部分が 1 人の人間の空き時間での努力によるものであることが特に素晴らしいです。

于 2009-01-18T21:12:03.733 に答える
0

OS を作成すると、他の大規模なソフトウェア プロジェクトと同じ問題が発生します。

明確に定義された目標がなく、経験不足によるタイムライン/見積もりの​​問題があります。

また、プログラマーが最初に「hello world」タイプのオペレーティング システムを作成すると、OS 開発の背後にある概念を学習してから、OS の開発に専念できる (OS の概念を学習するのではなく) と便利です。

于 2008-12-05T15:46:20.950 に答える