تولد یک سیستمعامل، بخش هشتم
به: گروه خبری مینیکس comp.os.minix
موضوع: دوست دارید در مینیکس چه چیزهایی ببینید؟
خلاصه: رایگیریی کوتاه درباره سیستمعامل جدید من
شناسه پیام: 1991Aug25.205708.9541@klaava.Helsinki.Fi
سلام به همه مینیکس کارها. من مشغول یک سیستمعامل (آزاد) هستم (فقط به عنوان یک سرگرمی. مثل گنو بزرگ و حرفهای نخواهد شد). برای کامپیوترهای سازگار با ۳۸۶ (۴۸۶). این جریان از آوریل شروع شده و کمکم دارد آماده میشود. دنبال هر جوابی از شما هستم که بگوید چه چیزهایی را در مینیکس دوست دارید یا دوست ندارید چون سیستمعامل من هم تقریبا شبیه همان خواهد بود (لایه فیزیکی فایل سیستم مشابه است (به خاطر مسایل عملی) و همین طور چند چیز دیگر).
تا الان، Bash (نسخه 1.08) و gcc (نسخه 1.40) و چیزهای دیگری را روی آن اجرا کردهام. همین میرساند که در عرض چند ماه به یک چیز به دردبخور خواهم رسید و به همین دلیل دنبال قابلیتهایی هستم که شما علاقهمندید در آن باشد. هر پیشنهادی را استقبال میکنم ولی این به آن معنا نیست که آن را به سیستم اضافه خواهم کرد (:
لینوس ([email protected])
پ.ن. بله! هیچ کد مینیکسی در آن نیست و از فایل سیستم مالتیترد پشتیبانی میکند. قابل انتقال نیست (چون از سوییچ وظایف ۳۸۶ و چند قابلیت خاص دیگر استفاده میکند) و به احتمال زیاد از هیچ چیزی جز هارددیسکهای AT پشتیبانی نخواهد کرد؛ چون آنها تنها چیزی هستند که دارم ):
خورهترینهای دنیای سیستمعامل احساس کردند که جرقهای در حال تولد است. پیشنهادهای چندانی در مورد مینیکس به دستم نرسید، ولی بعضیها شروع به پرسوجو کردند.
بیشتر بگو! احتیاجی به MMU داره؟
جواب: بله
چقدرش به سی است؟ مشکلات انتقال به دیگر سیستمها چیست؟ هیچکس باور نمیکند که کلا غیرقابل انتقال باشد ): من دوست دارم به آمیگا منتقلش کنم.
جواب: اکثر به سی نوشته شده، ولی خب اکثر مردم چیزی که من مینویسم را به عنوان سی قبول نخواهند کرد. چون به عنوان یک پروژه ۳۸۶ هم هست، از هر قابلیت اختصاصی آن که نام ببرید استفاده کرده. بعضی از فایلهای «سی» من همان قدر که سی هستند، اسمبلی هم هستند.
همان طور که قبلا گفتم، از MMU استفاده میکند. هم برای صفحهبندی (فعلا نه برای دیسک) و هم برای سگمنتبندی. همین سگمنتبندی است که اینقدر به ۳۸۶ وابستهاش کرده (هر وظیفه ۶۴ مگ برای کد دارد و ۶۴ وظیفه کلا به ۴ گیگ نیاز دارند).
حتی چند نفری هم بودند که پیشنهاد کردند آزمایشگرهای بتا باشند.
در نهایت چارهای نبود جز فرستادن برنامه. این روشی بود که عادت کرده بودم بر اساس آن برنامههایم را مبادله کنم. تنها چیزی که باید واقعا در موردش تصمیم میگرفتم، این بود که چه زمانی برای ارسال برنامه و سهیم شدن آن با دیگران مناسب است. یا اگر بهتر بگویم: کی برنامه به اندازه کافی بهتر شده تا از نشان دادن آن به دیگران خجالت نکشم؟
چیزی که نهایتا دنبالش بودم، این بود که کمپایلر و محیطی واقعی داشته باشم که بتوان برای لینوکس در خود لینوکس برنامه نوشت و از مینیکس بینیاز بود؛ اما وقتی دیدم که پوسته گنو به خوبی روی لینوکس اجرا شد، آن قدر احساس افتخار کردم که حس کردم آمادهام تا لینوکس را با دنیا شریک شوم. همچنین علاقه داشتم کمی بازخورد هم بگیرم.
همان زمانی که پوسته با موفقیت کمپایل شد، چند کد باینری دیگر هم داشتم که روی آن کار میکردند. عملا نمیشد کار خاصی در این سیستمعامل جدید انجام داد؛ ولی میدیدید که یک جورهایی یادآور یونیکس است. درحقیقت چیزی بود شبیه به یک یونیکس مفلوج.
پس تصمیم گرفتم که در دسترس دیگران هم بگذارمش. البته به شکل عمومی جریان را اعلام نمیکردم و در عوض با ایمیلهای خصوصی به تعداد کمی از دوستان -بین پنج تا ده نفر- اطلاع دادم که آن را روی سرویس دهنده اف.تی.پی. گذاشتهام. بروس اوانز مشهور در دنیای مینیکس و آری لمکه هم جزو این افراد بودند. کد منبع خود لینوکس و چند فایل اجرایی را آپلود کردم تا افراد بتوانند کار را شروع کنند. همین طور در ایمیل به آنها گفتم که برای راهاندازی و تنظیمات اولیه آن باید چهکار کنند. آنها هنوز نیازمند مینیکس -نسخه ۳۸۶- بودند و باید از قبل، gcc را به شکل نصبشده میداشتند. در حقیقت باید دقیقا نسخه من از gcc را میداشتند و به همین خاطر آن را هم عمومی کردم.
برای نسخه بندی، پروتکل خاصی هست. یک مساله روانی هم در آن دخیل است. وقتی احساس میکنید که نسخهای واقعا برای انتشار آماده است، آن را نسخه 1.0 مینامید. قبل از این مرحله، شماره نسخهها مشخص میکند که به نظر شما چقدر از کار تا رسیدن به نسخه 1.0 باقی است. با در نظر گرفتن این موضوع، من نسخهای از سیستمعامل که در اف.تی.پی. گذاشتم را نسخه 0.01 نامیدم. این عدد به همه گوشزد میکرد که این سیستمعامل به هیچ وجه آماده انتشار نیست.
و بله! تاریخ را دقیق یادم هست: ۱۷ سپتامبر ۱۹۹۱.
بعید میدانم بیشتر از یکی دو نفر آن را تست کرده باشند. آنها باید دردسر نصب یک کمپایلر خاص، خالی کردن یک پارتیشن برای بوت کردن سیستم و در نهایت کمپایل کردن کرنل جدید را تحمل میکردند تا تنها یک پوسته را اجرا کنند. اجرای پوسته عملا تنها چیزی بود که سیستمعامل من قادر بود انجام دهد. میتوانستید کد منبع را چاپ کنید که فقط حدود ۱۰۰۰۰ خط بود. اگر با فونت کوچک چاپ میکردید، چیزی کمتر از ۱۰۰ صفحه (این روزها این کد در محدوده ۱۰ میلیون خط است).
یکی از دلایل اصلیای که سیستمعامل را منتشر کردم این بود که نشان دهم این مدت فقط جو نمیدادهام و واقعا کاری انجام شده است. در اینترنت حرف زدن و ادعا کردن ارزشی ندارد. جدای از اینکه بحث سر چه چیزی است -چه سیستمعامل و چه سکس- خیلیها در اینترنت مشغول ادعاهای غیرواقعی هستند. پس خوب است که بعد از صحبت با کلی آدم در این مورد که مشغول نوشتن یک سیستمعامل هستید، بتوانید بگویید: «ببینید! واقعا یک کاری کردهام. این همه وقت شما را فیلم نکرده بودم. نتیجه را ببینید...»
و آری لمکه که راه رسیدن برنامه به سرویسدهنده اف.تی.پی. را هموار کرده بود؛ از اسم فریکس خوشش نیامد. او اسم دیگری که در پروژه استفاده شده بود یعنی لینوکس را بیشتر پسندید و ارسال من را به pub/OS/Linux تغییر نام داد. قبول دارم که به این کار اعتراضی نکردم؛ اما به هرحال او بود که این کار را کرد. پس من میتوانم با صداقت بگویم که خودخواه نیستم. یا حداقل میتوانم با صداقت نسبی بگویم که خودخواه نیستم. نظر من این بود که این اسم خوبی است و همیشه هم میتوانم انتخابش را گردن کس دیگری بیندازم. دقیقا همین کاری که الان دارم میکنم.
همان طور که گفتم، سیستمعامل من عملا چندان هم به درد نمیخورد. چون اگر حافظه را بیش از حد پر میکردید، یا کار غیرطبیعی دیگری انجام میدادید، به راحتی کرش میکرد. حتی اگر کار غیرطبیعیای هم نمیکردید، با رها کردن سیستمعامل به حال خود برای مدت طولانی، میتوانستید باعث کرش کردن آن شوید. البته در آن دوره قرار هم نبود کسی این سیستمعامل را طولانیمدت استفاده کند. قرار بود فقط دیده شود. باشه! قرار بود تحسین هم بشود.
این سیستمعامل چیزی نبود به جز یک ابزار خاص برای چند نفری که به نوشتن و بررسی سیستمعاملها علاقهمند بودند. آدمهای بسیار فنی و در بین آدمهای فنی هم یک گروه خیلی خاص با علاقهای مشترک.
بازخورد آنها مثبت بود ولی مثبت به این معنی که «خوب است این کار را هم بکند» یا «به نظر جالب میرسد ولی روی دستگاه من که اجرا نشد.»
یک ایمیل را دقیق به خاطر دارم که نوشته بود بسیار از سیستمعامل من خوشش آمده و یک پاراگراف را اختصاص داده بود به اینکه بگوید چقدر این برنامه خوب است. بعد در این باره نوشته بود که کل هارددیسک کامپیوترش به خاطر این آزمایش از بین رفته و درایور دیسک سخت باید یک مشکلی داشته باشد. او تمام کاری که کرده بود را از دست داده بود، ولی هنوز کاملا مثبت برخورد میکرد. خواندن اینجور ایمیلها مفرح بود. یک گزارش در مورد باگی که کل اطلاعات کسی را نابود کرده بود.
این دقیقا همان بازخوردی بود که من به دنبالش بودم. بعضی از باگها از جمله آن باگی که باعث میشد پر شدن حافظه به کرش بیانجامد را کشف و رفع کردم. قدم بزرگ انتقال gcc به لینوکس را هم برداشتم و نتیجهاش این بود که حالا میشد برنامههای کوچک را در خود لینوکس نوشت؛ به عبارت دیگر لازم نبود مردم قبل از نصب لینوکس، gcc من را نصب کنند.