پلان ۹ از آزمایشگاه‌های بل

پلان ۹ از آزمایشگاه‌های بل یا به اختصار Plan 9 ، یک سیستم‌عامل توزیع شده است که به صورت نرم‌افزار آزاد منتشر می‌شود. این سیستم‌عامل از اواسط دهه ۱۹۸۰ میلادی تا ۲۰۰۲ در مرکز تحقیقات علوم رایانه در آزمایشگاه‌های بل و برای اهداف پژوهشی و تحقیقاتی و به عنوان جانشینی برای یونیکس توسعه داده شد. پلان ۹ برای حل و فصل کردن ناتوانی‌های یونیکس و هسته آن در انجام برخی کارها نظیر رایانش توزیع‌شده، فضای نام‌های توزیع‌شده و فایل‌سیستم‌های توزیع‌شده، طراحی شد. توسعه و استفاده از این سیستم‌عامل همچنان توسط محققین سیستم‌عامل و همینطور علاقه‌مندان ادامه دارد. پلان ۹ ویژگی‌های جدیدی دارد که از جمله آن‌ها می‌توان به پروتکل 9p که برای دسترسی به فایل‌های موجود بر روی رایانه محلی و همینطور فایل‌های موجود بر روی رایانه‌های راه دور مورد استفاده قرار می‌گیرد، مونت‌های یونیونی، یک سیستم فایل proc بهینه شده و همینطور پشتیبانی بومی از یونیکد در سرتاسر سیستم اشاره کرد. در پلان ۹، همه رابط‌های سیستمی، از جمله رابط‌های مرتبط با شبکه و همینطور رابط‌های کاربری، به جای داشتن یک رابط مخصوص و ویژه، از طریق سیستم فایل در دسترس هستند. نام سیستم‌عامل پلان ۹ از آزمایشگاه‌های بل، از فیلمی به نام طرح شماره ۹ بیرون از فضا به کارگردانی اد وود گرفته شده‌است. همینطور، احتمالا نام گلندا، خرگوش پلان ۹ هم از فیلم دیگر وود به نام گلن یا گلندا گرفته شده‌است.
این سیستم‌عامل برای استفاده توسط کاربر نهایی و تازه‌کار در نظر گرفته نشده است، در عوض، پلان ۹ قرار بوده تا سکویی برای آزمایش کردن الگوریتم‌های جدید، فناوری‌های جدید و متودولوژی‌های جدید باشد.
تاریخچه
پروژه پلان ۹ در هنگام آغاز به کارش، یک پروژه داخلی در آزمایشگاه‌های بل بود. این پروژه به عنوان سکوی اصلی پژوهش در زمینه سیستم‌عامل جایگزین یونیکس شد. پلان ۹ چند تغییر در مدل اصلی یونیکس ایجاد کرده که هم استفاده از سیستم را راحت‌تر کرده و هم برنامه‌نویسی برای آن را، مثل محیط‌های چند کاربره توزیع‌شده. در سال ۱۹۹۲، آزمایشگاه‌های بل اولین انتشار عمومی از پلان ۹ را برای دانشگاه‌ها ارائه کرد و سه سال بعد یک نسخه تجاری برای عموم ارائه شد. در اواخر دهه ۱۹۹۰، شرکت لوسنت تکنولوژی که وارث آزمایشگاه‌های بل بود، پشتیبانی تجاری از این سیستم‌عامل را قطع کرد. در سال ۲۰۰۲ یک نسخه آزاد و متن‌باز این سیستم‌عامل عرضه شد.
یک جامعه کاربری و توسعه‌دهندگان که شامل اعضای قبلی و فعلی آزمایشگاه‌های بل و همینطور کارکنان موسسه فناوری ماساچوست می‌شود، همچنین این سیستم‌عامل را توسعه می‌دهند و انتشارهای جزئی را به صورت روزانه و در قالب فایل‌های iso منتشر می‌کنند. آزمایشگاه‌های بل همچنان میزبان توسعه‌دهندگان است. درخت کدهای منبع این سیستم‌عامل از طریق پروتکل‌های 9P و HTTP در دسترس است و از آن برای بروزرسانی کردن نسخه‌های در حال حاضر نصب شده استفاده می‌شود. علاوه بر عناصری که به صورت رسمی در فایل‌های iso گنجانده شده‌اند، آزمایش‌گاه‌های بل هم مخزنی از نرم‌افزارها و ابزارهایی که به صورت خارجی برای این سیستم‌عامل توسعه داده شده‌اند را هم میزبانی می‌کند.
پلان ۹ در ابتدا توسط اعضای مرکز تحقیقات علوم رایانه آزمایش‌گاه‌های بل توسعه داده شد، همان گروهی که پیشتر یونیکس و زبان برنامه‌نویسی سی را توسعه داده بودند. گروه توسعه پلان ۹ در ابتدا توسط راب پایک، کن تامسون، دیو پرستو، فیل وینترباتوم و با حمایت دنیس ریچی رهبری شد. در طول سال‌ها، بسیاری از توسعه‌دهندگان سرشناس با این پروژه همکاری کردند که برایان کرنیگان، تام داف، داگلاس مک‌ایلروی، بیارنه استروستوپ و بروس الیس از این جمله هستند.
مفاهیم طراحی
پلان ۹ مفاهیم طراحی یونیکس را تکامل بخشیده است:
تمام اشیا یا فایل هستند یا فایل سیستم.
ارتباطات از طریق شبکه برقرار می‌شود.
فضای نام‌های خصوصی به صاحبانشان امکان می‌دهد تا به شکل شفافی به فرایندهای محلی یا راه دور دسترسی داشته باشند.
پروتکل 9P
برخلاف یونیکس، پلان ۹ برای انجام ارتباطات بین-فرایندی و بین-رایانه‌ای، از سوکت‌های برکلی استفاده نمی‌کند. به منظور کاهش دادن تعداد فراخوان‌های سیستمی و رابط‌های سفارشی‌شده، در پلان ۹ به‌طور گسترده‌ای از پروتکل 9P استفاده شده‌است. 9P یک پروتکل بایت‌گرا مستقل از رسانه که به منظور رد و بدل کردن پیغام‌ها بین یک سرویس‌دهنده و یک سرویس‌گیرنده طراحی شده‌است. این برنامه برای مراجعه کردن و برقرار کردن ارتباط با فرایندها، برنامه‌ها و داده‌ها، هم در رابط کاربری و هم در شبکه مورد استفاده قرار می‌گیرد. با منتشر شدن ویرایش چهارم، نام این پروتکل به 9P2000 تغییر یافت.
برخلاف بیشتر سیستم‌عامل‌ها، پلان ۹ رابط‌های برنامه‌نویسی خاص‌منظوره فراهم نمی‌کند (همانند سوکت‌های برکلی، منابع اکس و فراخوان‌های سیستمی نظیر ioctl). در عوض، گرداننده‌های دستگاه در پلان ۹ رابط‌های کنترلی خود را به صورت سیستم فایل پیاده‌سازی می‌کنند و به این ترتیب، می‌توان از طریق همان عملیات‌های ساده نوشتن و خواندن بر روی فایل‌های ورودی/خروجی، به سخت‌آفزار دسترسی داشت. در نتیجه، برای به اشتراک‌گذاری سخت‌افزارها در شبکه، کافیست درخت دایرکتوری مربوط به همان سخت‌افزار در شبکه به اشتراک گذاشته شود تا دیگر رایانه‌ها بتوانند از آن استفاده کنند.
گذشته از اینها، هسته می‌تواند برای هر فرایند یک جدول مونت مجزا نگه‌داری کند و در نتیجه هر فرایند می‌تواند فضای نام فایل سیستمی مختص به خودش را داشته باشد. فضای نام‌های فرایندها می‌توانند به صورت مستقل ساخته شوند و کاربر می‌تواند به صورت هم‌زمان با برنامه‌هایی که دارای فضای نام‌ها ناهمگون هستند، به کار کردن بپردازد. از فضای نام‌ها می‌توان برای بوحود آوردن محیط‌های ایزوله شده همانند chroot، اما به صورت ایمن‌تر استفاده کرد.
ساختار یونیون دایرکتوری پلان ۹ الهام‌بخش فایل سیستم یونیونی در لینوکس و بی‌اس‌دی بوده‌است.
فضای نام‌ها و مونت‌ها یونیونی
پلان ۹ به کاربر اجازه می‌دهد تا فایل‌ها (که اسامی هم نامیده می‌شوند) را از دایرکتوری‌های مختلف در یک مکان منفرد جمع‌آوری کند. سپس عمل تبدیل نام از بالا به پایین صورت می‌گیرد: اگر آن نام در دایرکتوری سطح بالا موجود نباشد، دایرکتوری‌های سطح پایین‌تر برای یافتن آن فایل مورد جستجو قرار می‌گیرند. اگر در دایرکتوری‌های سطح پایین‌تر فایلی به نام مشابه قرار داشته باشد، در فهرست‌گیری از دایرکتوری‌ها نام این فایل چاپ می‌شود، اما آن فایل قابل دسترس نیست. در نتیجه، ادغام کردن دایرکتوری‌ها امکان‌پذیر نیست.
با استفاده از دستور bind می‌توان یک دایرکتوری یونیونی ایجاد کرد:
bind /arm/bin /bin
bind -a /usr/inferno/Plan9/arm/bin /bin
bind -b /usr/alice/bin /bin
در مثال بالا، /arm/bin در مسیر /bin مونت شده است، محتوای /arm/bin جانشین محتوای قبلی /bin می‌شوند. دایرکتوری bin اینفرنو پس از /bin به صورت یونیونی مونت شده‌است و دایرکتوری bin شخصی آلیس هم قبل از آن. وقتی که از /bin فایلی درخواست می‌شود، ابتدا در /usr/alice/bin برای پیدا کردن آن جستجو می‌شود، سپس در /arm/bin و در نهایت در /usr/inferno/Plan9/arm/bin.
فایل سیستم‌های مجازی خاص‌منظوره
/proc
پلان ۹ به جای فراهم کردن تعدادی فراخوان سیستمی مختص مدیریت فرایندها، فایل سیستم /proc را فراهم کرده‌است. هر فرایند یک دایرکتوری مخصوص به خود در فایل سیستم /proc دارد که این دایرکتوری حاوی اطلاعات و فایل‌های کنترلی مرتبط با آن فرایند است که می‌توان آن‌ها را از طریق فراخوان‌های سیستمی معمول مرتبط با ورودی/خروجی فایل‌ها تغییر داد و کنترل کرد.
این رویکرد فایل‌سیستمی به فرایندهای پلان ۹ اجازه می‌دهد تا با ابزارهای ساده مدیریت فایل همانند ls و cat، مدیریت شوند، با این حال فرایندها را نمی‌توان همانند فایل‌ها جابجا کرد.
/net
پلان ۹ فاقد فراخوان‌های سیستمی خاص‌منظوره برای دسترسی به پشته شبکه یا سخت‌افزارهای مرتبط با شبکه است. به جای این فراخوان‌های سیستمی، از فایل سیستم /net استفاده می‌شود. ارتباطات شبکه با خواندن و نوشتن پیام‌های کنترلی در فایل‌های موجود در این دایرکتوری، کنترل می‌شوند. این دایرکتوری حاوی تعدادی زیردایکتوری از جمله /net/tcp و /net/udp است که به ترتیب رابط‌هایی برای پروتکل‌های TCP و UDP هستند. پلان ۹ فاقد یک پیاده‌سازی قدرمتند از TCP/IP است و همینطور پروتکل IPv6 هم در آن پیاده‌سازی نشده.
یونیکد
برای کاهش دادن پیچیدگی مدیریت کردن کدبندی‌های نویسه، در سرتاسر سیستم پلان ۹ از یونیکد استفاده شده‌است. پیاده‌سازی اولیه یونیکد ISO 10646 بود، کن تامسون UTF-8 را ابداع کرد که تبدیل به کدبندی بومی در پلان ۹ شده‌است.
امنیت
مدل امنیتی پلان ۹، با مدلی که امروزه توسط غالب سیستم‌عامل‌ها بکار گرفته می‌شود، تفاوت بسیاری دارد. پلان ۹ فاقد کاربر ریشه است. هر کاربری بر روی رایانه خود اختیار تام دارد و رایانه‌ها می‌توانند به پیوستن به همدیگر، به منابع بیشتری نظیر چاپگرها و پردازنده‌ها — که توسط دیگر رایانه‌ها به اشتراک گذاشته شده‌اند — دسترسی داشته باشند. در پلان ۹، احراز هویت از طریق برنامه‌ای به نام Secstore صورت می‌گیرد.
مفاهیم مربوط به طراحی و ترکیب کردن اجزا
در پلان ۹ به آسانی می‌توان منابع سیستمی را به اشتراک گذاشت. به عنوان مثال، برای استفاده از کارت صدای یک رایانه دیگر، کافیست فایل /dev/audio آن رایانه بر روی رایانه محلی مونت شود. یا برای اشکال‌زدایی کردن فرایندی که بر روی رایانه دیگری در حال اجراست، کافیست شاخه /proc آن سیستم مونت شود. در پلان ۹، امکان ترکیب کردن بخش‌های مختلف سیستم، برای بدست آوردن قابلیت‌های پیشرفته‌تر وجود دارد.
برنامه‌های پلان ۹
بسته نرم‌افزاری پلان ۹ شامل تعدادی کامپایلر و زبان برنامه‌نویسی خاص، مجموعه‌ای از کتابخانه‌ها و همینطور یک سیستم پنجره‌ای مختص به پلان ۹ است. کامپایلر آن گونه‌ای از سی است که تعدادی افزونه و محدودیت دارد.
از مزایای طراحی پلان ۹ این است که بیشتر کارها با استفاده از ابزارهای ls, cat, grep, cp و rm به همراه پوسته آرسی (پوسته پیشفرض در پلان ۹) قابل انجام است.
برنامه‌های گرافیکی
برخلاف یونیکس، در طراحی پلان ۹، گرافیکی بودن برنامه‌ها هم مد نظر قرار داده شده‌است. پلان ۹ از سامانه پنجره‌ای اکس استفاده نمی‌کند و خود دارای یک سامانه پنجره‌ای سبک و کم‌حجم است. بعد از راه‌اندازی شدن سیستم، یک ترمینال، سامانه پنجره‌ای پلان ۹ که ریو نام دارد را اجرا می‌کند. ریو که بر بستر پروتکل 9p اجرا می‌شود، خودش هم یک سامانه توزیع‌شده است. کاربر می‌تواند از طریق ریو، پنجره‌های جدیدی ایجاد کرده که برنامه‌ای موسوم به آرسی را اجرا می‌کنند. سپس برنامه‌های گرافیکی را می‌توان از طریق آرسی اجرا کرد که این کار باعث می‌شود تا پنجره آن برنامه گرافیکی، جایگزین پنجره آرسی شود. سام و اکمه ویرایشگرهای متن در پلان ۹ هستند.
سیستم ذخیره‌سازی
پلان ۹ از فایل‌سیستم‌های FOSSIL و FAT پشتیبانی می‌کند. سیستم‌فایل FOSSIL در آزمایشگاه‌های بل به صورت اختصاصی برای پلان ۹ نوشته شده‌است و از قابلیت تصاویر لحظه‌ای پشتیبانی می‌کند.
سازگاری با یونیکس
هر چند که پلان ۹ قرار بود ادامه توسعه مفاهیم یونیکس باشد، اما سازگاری با نرم‌افزارهای یونیکس که از قبل موجود بودند، هیچگاه هدف پروژه نبوده است. هنوز بسیاری از ابزارهای خط فرمانی در پلان ۹ اسامی مستعاری برای دستورهای همتای خود در یونیکس هستند. پلان ۹ می‌تواند از برنامه‌های سازگار با استاندارد پازیکس پشتیبانی کند و همچنین از طریق رابط محیط آنسی/پازیکس می‌تواند سوکت‌های برکلی را شبیه‌سازی کند. برخی از باینری‌های سیستم‌عامل لینوکس را می‌توان به کمک linuxemu اجرا کرد، اما این برنامه هنوز در حال توسعه است.
تاثیر
پلان ۹ ثابت کرده‌است که این اصل یونیکس که هر رابط سیستمی می‌تواند با استفاده از مجموعه‌ای از فایل‌ها نمایش یابد را می‌توان در یک سیستم‌عامل توزیع‌شده مدرن با موفقیت پیاده‌سازی کرد. برخی از قابلیت‌های پلان ۹ از جمله کدبندی UTF-8 یونیکد، در دیگر سیستم‌عامل‌ها هم پیاده‌سازی شده‌اند. برخی از سیستم‌عامل‌های شبه یونیکسی نظیر لینوکس، پورتکل 9P، سیستم فایل پلان ۹، و شکل‌های محدودی از فراخوان‌های سیستمی مشابه rfork را پیاده‌سازی کرده‌اند. بعلاوه، در پلان ۹ از فضای کاربری، تعدادی از نرم‌افزارها و ابزارهای پلان ۹ از جمله ویرایشگرها سام و اکمه به یونیکس و سیستم‌های لینوکسی پورت شده‌اند و تا حدی محبوبیت کسب کرده‌اند. چندین پروژه بدنبال این هستند که برنامه‌های سیستم‌عامل گنو که به همراه هسته لینوکس استفاده می‌شوند را با برنامه‌های پلان ۹ جایگزین کنند. مدیر پنجره 9wm از ۸1⁄2 الهام‌گرفته شده‌است که سیستم پنجره‌ای قدیمی پلان ۹ بود. wmii هم به شکل گسترده‌ای متاثر از پلان ۹ است. با این حال محبوبیت پلان ۹ هیچگاه به اندازه محبوبیت یونیکس نرسید و عمدتا به صورت یک سیستم‌عامل تحقیقاتی باقی ماند.
با این حال، پلان ۹ هیچگاه نتوانست محبوبت لینوکس را بدست آورد و بیشتر به صورت یک ابزار تحقیقاتی باقی ماند:
پلان ۹ شکست خورد تنها به این خاطر که نسبت به یونیکس، به اندازه کافی پیشرفت بزرگی محسوب نمی‌شد تا بتواند جای جدش را بگیرد. یونیکس در مقایسه با پلان ۹، تلق و تولوق بیشتر و عیب و نقص‌های آشکاری دارد، اما توانست بی‌خوبی جا پای خودش را پیدا کند. درسی در این قضیه برای معماران سیستم جاه‌طلب وجود دارد: خطرناک‌ترین دشمن برای یک سیستم بهتر، وجود داشتن کدبیسی است که به اندازه کافی خوب است و می‌تواند کار راه‌انداز باشد.
-- اریک ریموند
از جمله دیگر فاکتورهایی که بر استقبال کم از پلان ۹ موثر بوده‌اند، می‌توان به نداشتن پشتیبانی تجاری، تعداد کم برنامه‌های کاربردی برای استفاده توسط کاربر نهایی، و عدم وجود گرداننده‌های دستگاه اشاره کرد.
طرفداران و توسعه‌دهندگان پلان ۹ ادعا می‌کنند که مشکلاتی که مانع محبوبیت پلان ۹ می‌شد، حل شده‌اند، اهداف اصلی آن به عنوان یک سیستم توزیع‌شده، محیط توسعه، و سکوی تحقیقاتی، همگی برآورده شده‌اند و همینطور این سیستم از محبوبیت میانه، اما رو به رشدی برخوردار است. چندین پروژه وجود دارند که به صورت فعالانه‌ای در تلاش هستند تا پلان ۹ را گسترش دهند که از جمله آن‌ها می‌توان به 9atom و 9front اشاره کرد. این انشعاب‌های نرم‌افزاری، با نرم‌افزارها و درایورهای سخت‌افزاری بیشتر از جمله nupas، کامپایلر go، پشتیبانی از سیستم کنترل نسخه مرکوریال و برنامه‌های دیگر، پلان ۹ را گسترش و بهبود داده‌اند. همچنین پلان ۹ به رایانه تک‌بردی رزبری پای هم پورت شده‌است.
پروانه
از ویرایش چهارم که در آوریل ۲۰۰۲ منتشر شد، تمام کدهای منبع پلان ۹ تحت پروانه همگانی لوسنت نسخه ۱٫۰۲ در دسترس هستند. این پروانه توسط موسسه پیشگامان متن‌باز به عنوان یک نرم‌افزار متن‌باز و همچنین توسط بنیاد نرم‌افزارهای آزاد به عنوان یک نرم‌افزار آزاد شناخته شده‌است و همچنین با رهنمودهای نرم‌افزار آزاد دبیان سازگار است.
در فوریه سال ۲۰۱۴، آلکاتل-لوسنت دارنده فعلی حق تکثیر پلان ۹، به دانشگاه برکلی اجازه داد تا تمامی نرم‌افزارهای پلان ۹ را که قبلا تحت پروانه لوسنت بودند را تحت پروانه جی‌پی‌ال نسخه ۲ منتشرکند.
مقایسه سیستم‌عامل‌های متن‌باز
گلندا، خرگوش پلان ۹