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

تاریخچه

پروژه پلان ۹ در هنگام آغاز به کارش، یک پروژه داخلی در آزمایشگاه‌های بل بود. این پروژه به عنوان سکوی اصلی پژوهش در زمینه سیستم‌عامل جایگزین یونیکس شد. پلان ۹ چند تغییر در مدل اصلی یونیکس ایجاد کرده که هم استفاده از سیستم را راحت‌تر کرده و هم برنامه‌نویسی برای آن را، مثل محیط‌های چند کاربره توزیع‌شده. در سال ۱۹۹۲، آزمایشگاه‌های بل اولین انتشار عمومی از پلان ۹ را برای دانشگاه‌ها ارائه کرد و سه سال بعد یک نسخه تجاری برای عموم ارائه شد. در اواخر دهه ۱۹۹۰، شرکت لوسنت تکنولوژی که وارث آزمایشگاه‌های بل بود، پشتیبانی تجاری از این سیستم‌عامل را قطع کرد. در سال ۲۰۰۲ یک نسخه آزاد و متن‌باز این سیستم‌عامل عرضه شد.
یک جامعه کاربری و توسعه‌دهندگان که شامل اعضای قبلی و فعلی آزمایشگاه‌های بل و همینطور کارکنان مؤسسه فناوری ماساچوست می‌شود، همچنین این سیستم‌عامل را توسعه می‌دهند و انتشارهای جزئی را به صورت روزانه و در قالب فایل‌های 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.

مفاهیم مربوط به طراحی و ترکیب کردن اجزا

در پلان ۹ به آسانی می‌توان منابع سیستمی را به اشتراک گذاشت. به عنوان مثال، برای استفاده از کارت صدای یک رایانه دیگر، کافیست فایل ‎/dev/audio آن رایانه بر روی رایانه محلی مونت شود. یا برای اشکال‌زدایی کردن فرایندی که بر روی رایانه دیگری در حال اجراست، کافیست شاخه ‎/proc آن سیستم مونت شود. در پلان ۹، امکان ترکیب کردن بخش‌های مختلف سیستم، برای بدست آوردن قابلیت‌های پیشرفته‌تر وجود دارد.

برنامه‌های پلان ۹

بسته نرم‌افزاری پلان ۹ شامل تعدادی کامپایلر و زبان برنامه‌نویسی خاص، مجموعه‌ای از کتابخانه‌ها و همینطور یک سیستم پنجره‌ای مختص به پلان ۹ است. کامپایلر آن گونه‌ای از سی است که تعدادی افزونه و محدودیت دارد.
از مزایای طراحی پلان ۹ این است که بیشتر کارها با استفاده از ابزارهای ls, cat, grep, cp و rm به همراه پوسته آرسی (پوسته پیشفرض در پلان ۹) قابل انجام است.

برنامه‌های گرافیکی

برخلاف یونیکس، در طراحی پلان ۹، گرافیکی بودن برنامه‌ها هم مد نظر قرار داده شده‌است. پلان ۹ از سامانه پنجره‌ای اکس استفاده نمی‌کند و خود دارای یک سامانه پنجره‌ای سبک و کم‌حجم است. بعد از راه‌اندازی شدن سیستم، یک ترمینال، سامانه پنجره‌ای پلان ۹ که ریو نام دارد را اجرا می‌کند. ریو که بر بستر پروتکل 9p اجرا می‌شود، خودش هم یک سامانه توزیع‌شده است. کاربر می‌تواند از طریق ریو، پنجره‌های جدیدی ایجاد کرده که برنامه‌ای موسوم به آرسی را اجرا می‌کنند. سپس برنامه‌های گرافیکی را می‌توان از طریق آرسی اجرا کرد که این کار باعث می‌شود تا پنجرهٔ آن برنامه گرافیکی، جایگزین پنجره آرسی شود. سام و اکمه ویرایشگرهای متن در پلان ۹ هستند.

سیستم ذخیره‌سازی

پلان ۹ از فایل‌سیستم‌های FOSSIL و FAT پشتیبانی می‌کند. سیستم‌فایل FOSSIL در آزمایشگاه‌های بل به صورت اختصاصی برای پلان ۹ نوشته شده‌است و از قابلیت تصاویر لحظه‌ای پشتیبانی می‌کند.

سازگاری با یونیکس

هر چند که پلان ۹ قرار بود ادامه توسعه مفاهیم یونیکس باشد، اما سازگاری با نرم‌افزارهای یونیکس که از قبل موجود بودند، هیچگاه هدف پروژه نبوده است. هنوز بسیاری از ابزارهای خط فرمانی در پلان ۹ اسامی مستعاری برای دستورهای همتای خود در یونیکس هستند. پلان ۹ می‌تواند از برنامه‌های سازگار با استاندارد پازیکس پشتیبانی کند و همچنین از طریق رابط محیط آنسی/پازیکس می‌تواند سوکت‌های برکلی را شبیه‌سازی کند. برخی از باینری‌های سیستم‌عامل لینوکس را می‌توان به کمک linuxemu اجرا کرد، اما این برنامه هنوز در حال توسعه است.

پروانه

از ویرایش چهارم که در آوریل ۲۰۰۲ منتشر شد، تمام کدهای منبع پلان ۹ تحت پروانه همگانی لوسنت نسخه ۱٫۰۲ در دسترس هستند. این پروانه توسط موسسه پیشگامان متن‌باز به عنوان یک نرم‌افزار متن‌باز و همچنین توسط بنیاد نرم‌افزارهای آزاد به عنوان یک نرم‌افزار آزاد شناخته شده‌است و همچنین با رهنمودهای نرم‌افزار آزاد دبیان سازگار است.
در فوریه سال ۲۰۱۴، آلکاتل-لوسنت دارنده فعلی حق تکثیر پلان ۹، به دانشگاه برکلی اجازه داد تا تمامی نرم‌افزارهای پلان ۹ را که قبلاً تحت پروانه لوسنت بودند را تحت پروانه جی‌پی‌ال نسخه ۲ منتشرکند.