Visopsys 1997年からたった一人で開発され続けるOSがスゴイ!
引用元:https://news.ycombinator.com/item?id=45785858
2006年の大学のOS授業でVisopsysをいじる課題があったんだ。当時は原始的なソフトだったけどUIはあったよ。課題で質問したくて作者にメールしたら教授にバレて怒られちゃった。自分で解決しなきゃいけなかったけど、OSの深いレベルで学べたのはすごく楽しかったな。良い思い出だよ :)
ところで、みんな俺のユーザー名、何か気づいた? :)
OPが単にこの体験を心から楽しんだだけなのか、それとも実はそのOSの作者なのか、どっちか判別できないな。
いや、俺は作者じゃないよ。14年前にHackernewsアカウントの名前を決めるとき、このプロジェクトと名前が気に入ったから選んだだけさ。プロジェクトや作者を誤解させようって意図は全然ないよ。
「プロジェクトと名前が好きで選んだ」ってさ。
ある人は__xXx_ultimatEWeapon420_xXx__みたいな名前をつけるのに、別の人は適当なオモチャのOSから名前を取るんだね。
まったく、典型的なオタクの習慣だよね。
まったくその通り…30年前にDec Unixカーネルにちなんで自分に名前をつけた俺が言うのもなんだけどね…。
まったくその通りだよ。
彼は単に、懐かしく思い出す何かに敬意を表して自分の名前にしただけなんだよ。
君の投稿を最後まで読んだら、まるで映画を見てるみたいだったよ…
これはマジでかっこいいよ!他の多くの趣味OSと違って、基本的な用途なら日常使いもできそうだね(子供、高齢者、古い/安価なハードウェアとか)。PCがものすごいパワフルになった今でも、メモやカレンダー、電卓みたいに、元々の家庭用PCがしてたようなことだけしたい人はたくさんいるはずだよ。
君が説明してるのは、大画面のiPadで動くiOSのことだよ。4歳の子から77歳のPC音痴の父までみんな使えるんだ。Visopsysは、基本的にPCオタクじゃない人には全然使えなさそうだね。
理論的にはそうなんだけど、実際は「とにかく成長」が経済の基本だから、iOSももう適してないよ。最近のiOSでさえUIをランダムに変えたり、Apple TVやiCloudへの登録を促す「通知」や「提案」(現代の「広告」の婉曲表現)を送ってきたりするからね。
最近のiOSでさえUIをランダムに変えるって言ってたけど、俺たち「ランダム」の捉え方が全然違うみたいだね。
Tahoeで、20年以上あった画面中央の音量インジケーターをなんでなくしたんだ?あれは音量コントロールが機能してるかどうかの重要な表示だったのに。メニューバー右上のちっちゃいバーに変わって、ほとんど見えないし、音量レベルも分かりにくくなった。なんで?あれはまさにランダムな変更に見えたよ。全然機能的じゃないし。
基本的なニーズなら(子供、高齢者とか)って言うけど、ほとんどの子供や高齢者も時々主流のブラウザを使う必要があるよ。Visopsysは主流のブラウザを動かすのはまず無理だろうね。
なんでかっていうと、君より前に多くのユーザーが「画面全部を占領する!」って不満を言ってたからだよ。正直、動画とか見てるときに隠れるのはちょっとイライラしたんだ。
君が言ってた「大画面iPadのiOS」だけど、iPadはApple製品への入り口だったんだ。でもジョブズがいなくなってから、メニューは「謎肉」みたいに分かりにくくなって、画面の端からスワイプする場所で機能が変わるような変なジェスチャーだらけになった。右上スワイプでコントロールセンター、中央上スワイプで通知?高齢者にそんなの教える気になれないよ。母にはホームボタンがあるiPhone SEじゃないと無理だね。俺はかなりのオタクだけど、iPadのマルチタスクもどうやるか覚えられないし、また変わったみたいだし。結局、万人向けUIって無理なんだよ。iPhoneやiPadは良くやったけど、そろそろシンプルモードとエキスパートモードみたいなUIの選択肢が必要だと思うね。
じゃあ、「主流のブラウザ」って意味を考え直す必要があるね。
一体どんな動画見てるんだよ。そんな頻繁に音量変える必要があって、2秒見逃すのが問題になるようなのって?
そうなったらいいけど無理だよ。基本的なニーズがある人は、サポートがあって期待通りに動く主流の製品にこだわるべき。銀行や複雑なウェブサイト、オンライン動画、教育アプリなどが必要だからね。高齢者だって高度なこと求める人いるし、ニッチなOSはGeek向けだよ。
おい。音量を変えたかったんだ。キーを押したら音量が変わった。それだけフィードバックがあれば十分だ!視覚で邪魔されたくないね。でも、かわいかったし、「表現豊か」か「最小限」のUIオプションとしてならあってもいいかも。
ウェブブラウザには、文書ビューア、リモート事務処理マシン、クロスプラットフォームのアプリケーションフレームワークの3つの目的があるんだ。最初の2つは1ヶ月で作れるブラウザで十分。(試作版ならもっと短縮できるけど、個人的には嫌だな。)銀行サイトはビジネスロジックを除けば複雑じゃない。Dilloでも動かない理由はないはずだ。
じゃあ、何が良いんだ?君は間違ってると思うし、コンピューターが苦手な人が何かをするには、iOSかAndroidのタブレットが最高のフォームファクターだよ。どんなデタラメが追加されようと、他のものは全部ダメだね。もっと良いもの知ってるのかい?
最近、iPhone 16が盗まれたから新しいiPhoneを買わざるを得なくて、iOS 26を押し付けられたんだ。ひどいもんだよ(私にとってはね、好きな人もいるだろうけど)。醜いガラスのUX、変な浮遊するコントロール、常に表示されるディスプレイ、もううんざり。全然革新的じゃなくて、ただ「新しい」って見せるためだけに全部作り直したとしか思えないね。
iOS 26でサイドのやつを削除して、26.1でまた復活させるんだって。プロジェクトのリーダーシップが完全に欠如してるし、それが妙に心配になるね。
HDMI出力時とか、音量調整がうまくいかない時に、小さい表示だと困るんだ。Appleには「It just works」を貫いてほしい。あのポップアップは音量レベル以上の情報くれてたし、分かりやすくて20年間一貫してた。変更する必要はなかったし、今回の改悪は本当にひどいよ。
「君と僕では“ランダム”の考え方がかなり違うと思うよ。」
全く、“ランダム”じゃないね。iOS 26に関して、どんな言葉を使うべきかな?計画的?意図的?それとも悪意があったの?
それはあなたにとって悪いだけだよ。あのフローティングオーバーレイが心底嫌いだった人もいるし、それが消え去ってくれて最高に嬉しいと思ってるよ。
「君と僕では“ランダム”の考え方がかなり違うと思うよ。」
全く、“ランダム”じゃないね。iOS 26に関して、どんな言葉を使うべきかな?計画的?意図的?悪意のある?
ドキュメントビューアとかフォーム作るのに、フロントエンド開発者がReactやNext.jsアプリに1000以上のNPM依存関係を使うってありえない!Webってほんと過剰で、何でもJavaScriptで過剰に作られすぎだよね。
非Linux OS開発はマジで凄いけど、「日常使いできる」ってのは違うね。ChromeとかFirefoxみたいな基本的なブラウザがないと、一部のマニア以外には全然使えないよ。
もっとコメントを表示(1)
プロジェクトにリーダーがいなくても、ユーザーが好きなようにUIをカスタマイズできるようにすればOKじゃん?その方がUIデザイナーも楽だし、コーダーはAIがいるから問題ないでしょ??
これを理解するなら、チンパンジーがiPhoneでChimstagram使ってる動画見れば一発だよ。コンピューター音痴なんてレベルじゃなくて、人間ですらないじゃん!
https://www.youtube.com/watch?v=XTiZqCQsfa8
iOSやMacOSのUIジェスチャー、ほんと複雑すぎて共感するわ!長年使ってる俺(40歳のソフト開発者)ですら、どこをスワイプしたりクリックしたら何が起きるか全然覚えられないよ。高齢者やコンピューター音痴には全然優しくないよね!
「ランダム」じゃなくて「恣意的」って言葉を使った方がしっくりくること、よくあるよね。
右に動くやつはね、デスクトップをクリックしてデスクトップを表示してるか、ホットコーナーを設定してるか、Stage Manager使ってるかのどれかじゃない?あくまで予想だけど、参考になれば嬉しいな。
Apple社内でUIのカスタマイズを訴える人たちは、アクセシビリティオプションとして隠されちゃってると思うよ。Appleはカスタマイズが嫌いで、常に「Apple流」を押し付けてくるからね。
透明背景に”アップグレード”したせいで、デフォルトだとテキストが見にくいOSのこと?お年寄りには勧められないけど、子供たちは使いこなすよね。
驚き!以前のスレッドはこれだけだったよ。
Visopsys - https://news.ycombinator.com/item?id=18147201 - 2018年10月(6コメント)
dangも「え、この話題って今まで一度しか投稿されてないの?」って驚いてたよ。
面白いね。このシステム、知らなかったよ。モノリシックカーネルで、カナダ人プログラマーのAndy McLaughlinが1997年からほぼ一人で開発。GUI、プリエンプティブマルチタスク、仮想メモリ搭載。CとIA-32アセンブリ言語で実装。作者の2012年インタビューはこちらだよ:
https://www.pingdom.com/blog/visopsys-operating-system/
探すのにちょっと時間かかったけど、ソースコードはここにあるよ:
https://sourceforge.net/projects/visopsys/files/visopsys-0.9…
探し出してくれてありがとう。それでも274052行もある結構な規模のコードベースだね。
それって4000ページ分だよ。持ち運べるくらい小さいね。1週間で全部読めるけど、理解するには足りないかな。glibcの半分で、FirefoxやLinux kernelの100分の1のサイズだよ。
あー、このOSって、大学教授が授業の課題に使ってたんだよ。デバイスドライバーを書かせたり、パイプを実装させたりね。天才的だと思ったし、学生にはかなりの挑戦だったはずだよ。
この授業、公開ウェブページはあるの?見てみたいし、空き時間で似たようなことやってみたいな。
一人でOSを作ってるなんてマジですごいよね!簡単なことじゃないってわかるわー。
難しくないって言われるけど、実は多くの人が思ってるよりとっつきやすいんだよね。モダンなOSのOSのほとんどは大量のドライバーで成り立ってるし、基本的な部分はそこまで複雑じゃないんだ。ただ、細かい部分がたくさんあるだけって感じ。
「たった」って言うのは完全に過小評価だよ。一人でやると20年もかかるようなプロジェクトで、一歩一歩は「たったこれだけ」って感じるけど、全体で見るとその複雑さは計り知れないんだから。作者にとってはもうOSと脳が一体化しちゃってるから簡単に思えるだけなんだろうね。
何を目標にするかによっても変わるよね。シンプルなファイルシステムやビデオドライバーで済ませることもできるし、OSの定義自体も難しい問題だ。WindowsとかMac OS、Linuxに入ってるソフトウェアの多くは、本来のOSの一部じゃないって意見もあるけど、どこまでがOSかって線引きは難しいよね。
ちょっとアホな質問かもだけど、ユーザー空間ドライバーを使うOSだったら、既存のドライバーを流用したり、再利用したりできないのかな?もしそうなら、新しいOSが普及するまでの道のりを短縮できるんじゃない?
他の人も言ってるけど、「たった」って表現は過小評価されすぎだよね。x86_64だとすぐに古くて関係ない詳細に突き当たって、全然楽しくないし。RISC-Vみたいな良いアーキテクチャの小さなボードでトイOSを作る方が断然楽しいよ。nand2tetrisとかxv6みたいなRISC-Vプロジェクトもいいね。
AtheOSとその後のSyllableOSも見てみてよ。これも一人の開発者から始まって、別の開発者が引き継いでオープンソースになったけど、残念ながら終わっちゃったんだ。でも、最初の3年間でかなりすごかったんだよ。みんなが軽いノリでOSを作ってたあの頃が懐かしいなー。
SkyOSも忘れちゃいけないね。他にもたくさんあるし、最近だとSerenityOSが注目されてるよ。ああいう時代はまだ終わってないってことだよね。それに、単一開発者のOSって意味じゃTempleOSも外せないだろ。
SkyOSかー。俺、ベータプログラムにお金払って参加してたのに、いきなり開発中止になっちゃったんだよね。何があったのかはわからないけど、他のOSからコードを「借りてた」っていう噂も流れてたな、確証はないけどさ。
CP/Mも一人で作られたOSだったんだよね。
CP/Mはもっとシンプルだったぜ。
CP/Mはシンプルだったかもな。でも開発が簡単だったかは分かんないぜ。当時はアセンブリ言語で書かれてて、パフォーマンスとメモリ使用量の考慮が大変だったんだ。CP/Mは互換性のないハードウェアで動くことで有名で、BIOSで不具合を解消してたんだよ。これは一部では開発を単純化したけど、基盤ハードウェアの仮定ができないから、他の点では複雑になったんだな。
CP/Mにはいいドキュメントがあるぜ。Kildallは最初ハードディスクで苦労してたらしい。CP/Mはアセンブリで書かれた部分が多いけど、PL/Mでも書かれたところもあるんだな。
元記事の投稿主は複雑さも比較も話してないだろ。
CP/M 2.2はオープンソースだけど、フリーのアセンブラはないな。クロスアセンブラならこれがあるぜ: http://john.ccac.rwth-aachen.de:8000/as/
でもOpenBSDだとビルドが面倒だぜ。ZMachineやV3のゲームはフリーの例じゃないな。
もっとコメントを表示(2)
俺が返信したコメントにはフリーの話題も出てなかったぜ。
じゃあSerenity OSには度肝抜かれるぜ。
あるいはLinuxだな。
あんたが言ってるのはGNU/Linuxのことだと思うけど、最近は「GNU plus Linux」って呼んでるぜ。
TempleOSって知ってるか?神に認められた唯一のOSなんだぜ。
史上最高のプログラマーが作ったんだって!
最近Michael MJDがこの動画作ったんだ!見てみてね:https://youtu.be/5MZljgX2WA
約30年経ってもまだ0.9っていうのが一番すごいよね
古すぎて、1.0が出る頃には3Dアイコンとかウィンドウ枠がまた新しく見えるかもね。まさに長期的なビジョン!冗談はさておき、カスタムOSの記事はいつも楽しく読んでるよ。
冗談だろって思うかもしれないけど、アイコン見た時、最初に「いいな」って思ったよ。フラットデザインはもう飽きたよね。
公式URLはこれだよ:https://0ver.org/
Semantic versioningってちょっと冗長すぎない?特にメジャーバージョンを出すタイミングとか。OS Xは何年もバージョン10だったのに、毎年「メジャー」バージョンを出してたでしょ。みんなやってるけど、本当に必要なのかな?
Semantic versioningはAPI向けで機能向けじゃないんだ。だからAPIを利用する開発者向けってことだね。リリース版にはカレンダーバージョンを使うといいよ。例えばv2025-11-02みたいにね。ユーザーにとっては機能が重要だから、新機能があったらバージョンアップって感じかな。車のモデルと似てるね。
Oracleも昔そんな感じだったよね?ドットコムバブル全盛期にはOracle 8i(iはInternet)があって、数年後にはクラスタリングが流行ってOracle 10g(gはgridだったかな?)とか。今も続けてるみたいで、最新版は23aiだってさ。
開発者だってユーザーだし、APIの機能って全体の機能の一部じゃん?その区別に何の意味があるの?例えば古いデスクトップアプリのセキュリティ修正を、新しいバージョンを買わせずにどうユーザーに伝える?結局、バージョン管理はツールで、プロジェクト次第でSemVerが合うか合わないかは変わるよ。
SemVerってAPIの変更を開発者に伝えるもので、実装だけ変わってもSemVerは変わらない。インターフェースのバージョン管理に向いてるよ。リリースバージョンはSREとか構成管理のためで、ユーザーバージョンはユーザーの期待に関わるんだ。セキュリティ修正は影響を受けるユーザーには無料であるべきだし、リリース理由も明記するべきだね。ホットフィックスならバージョンに拡張して対応できるよ。
複数のバージョン管理スキームを使うのは分かるけど、それが”唯一の正しい方法”じゃない。SemVerの”セマンティック”はAPIバージョンに限定されないと思うんだ。SemVerをAPI専用と提案してるのか、ソフトの種類で使い分けるべきなのかハッキリしないけど、どれにしても納得できないよ。SemVerが唯一の最適解とは言わないけど、ソフトの種類じゃなくてリリース戦略で決まるはずだ。
SemVerの元々の考えは、インターフェースの利用者視点での変更を示すもの。だから、それ以外には使わないべきだと僕は主張してるんだ。SemVerはインターフェース利用者に意味を伝えるもの、リリースバージョンは構成とSREのため、ユーザーバージョンは機能とセキュリティのためって使い分けてる。僕は”唯一の正しい方法”を提案してるんじゃなくて、3つの異なるユースケースで3つのバージョン管理戦略を使ってるよ。具体的な運用例も紹介してる。
SemVerが正式になるずっと前から、似たバージョン管理スキームって使われてたよね。もし”どんなユーザーインターフェースもAPIインターフェースだ”って言うなら、僕も異論はないよ。GNU coding standardsも18年以上前からメジャー・マイナーバージョンを使うべきって言ってるし。君のuser appのバージョン管理も同じアプローチみたいだね。
https://cvs.savannah.gnu.org/viewvc/gnustandards/gnustandard…
”どんなユーザーインターフェースもAPIインターフェースだ”なんて僕は認めないよ。APIって”Application Programmers”向けっていう特定の意味があるからね。システムには3種類の”ユーザー”がいて、それぞれに異なる情報が必要なんだ。だから、その情報に合わせてバージョン管理スキーマを使い分けるべきだ。SemVerはAPI連携するシステムに、リリースバージョンはSREや運用に、そしてエンドユーザーには分かりやすいバージョンを使うべきだよ。
君はいくつか間違った分類をしてると思うよ。単一リリースのWeb applicationとかAPIなら、debuggingのために現状を伝えるだけでよくて、calendar versionで十分だ。もし単一API versionを厳密に維持するなら、calendar versionも有効だよ。desktop softwareにSemVerを使うのも意味がある。versioningはgoalを持つべきで、software typesでversioning schemesを当てはめようとするのはおかしいって。
もしSemVerが145.14.7みたいに大きな数字になるなら、API designerをクビにするべきだね。backward compatibleじゃないときにmajor versionを上げることを忘れないで。New functionalityはbackward compatibleを持たせられるし、古いSemVer APIも、internallyで新しいformatにupgradeするendpointを用意して維持できるんだ。結局、user version numbersはlogicalなものよりmarketingだよ。
”API designerをクビにしろ”って言うけど、それならSemVerを使わなきゃいいんじゃない?僕は、versioningはproductに関係なくcommunication toolだって言ってるんだ。softwareの種類でどれがbestって単一のanswerはないよ。君はgood API design practicesをversioning schemeにencodeしようとしてるみたいだけど、そうじゃないと僕は思うな。