جدا از تفاوت‌های معماری بین Mir(میر) و Wayland(ویلند)، Mir و Wayland اهداف کاملاً متفاوتی برای پروژهایشان دارند. از آن جایی که Wayland برای بعضی‌ها گیج کننده به نظر میرسد (که بی‌دلیل هم نیست؛ چون ویلند اندکی پیچیده است) من توضیحی درباره این پروژه‌های متفاوت و اهدافشان با در نظر گرفتن X11 به عنوان یک نقطه مرجع میدهم.

X11 و X.org

هر کسی با سرور محلی و کاربر‌پسند X خوب آشناست. این چیزی است که ما در حال حاضر به عنوان سرور نمایش پیش‌فرض لینوکس در اختیار داریم. اهداف این مطلب درباره تکنولوژی‌های تشکیل دهنده X است:

پروتوکل X11

شما همگی با پروتکل X11 آشنا هستید، درسته؟ این درنده بی‌خطر نحوه صحبت با یک سرور X را مشخص میکند - هم صورت دو-دویی پیامی که شما ارسال و دریافت می‌کنید و هم آن چه که می‌توانید انتظار داشته باشید سرور با هر پیام دریافت شده‌ای انجام دهد(ساختار). تعداد زیادی افزونه پروتکل هم وجود دارد؛ پیام‌های جدید برای قادر ساختن سرور به انجام کارهای جدید، به طور مثال استفاده از بیش از یک مانیتور به شکلی غیر احمقانه.

کتابخانه‌های کلاینت X11

هیچ کس حقیقتاً با فرستادن داده‌های پردازش نشده از یک سوکت با X ور نمی‌رود؛ کاربران معمولاً از کتابخانه‌های کلاینت استفاده می‌کنند - XCB امروزی، یا Xlib قدیمی کسل کننده(همچنین شناخته شده با نام libX11.so.6). آن‌ها کار کسل‌کننده در اختیار گذاشتن داده‌های دو-دویی به سرور را انجام می‌دهند و سرور X را از دید گسترده‌تری بهرمند می‌کنند؛ دیدی که XOpenDisplay را قادر میسازد انجام کارها را بهتر شروع کند.

آن چه که در بالا گفته شد در حقیقت کمی تا نسبتی دروغ است، تقریباً بیشتر وقت‌ها کاربران حتی از XCB یا Xlib هم استفاده نمی‌کنند. آن‌ها از تولکیت‌هایی نظیر +GTK یا QT استفاده می‌کنند و آن‌ها از Xlib یا XCB استفاده می‌کنند.

سرور Xorg

این قسمتی است که مشخصاً بیش از همه به X ارتباط دارد - تک، بی‌همتا، Xorg سرور X! این سرور نمایش از /usr/bin/X اجرا می‌شود که همه آن را می‌شناسیم و دوستش داریم. اگر چه کارهای دیگری هم توسط X11 انجام می‌شوند، اما این تمام چیزی است که شما بر روی میزکاری آزاد خواهید دید، یا بر روی OSX. پس اینها مبنای کار ما رو تشکیل میدن؛ یه پروتوکل، یه کتابخونه کلاینت یا بیشتر و یه پیاده‌سازی سرور نمایش. نظرتون درباره mir و wayland چیه؟

پروتوکل Wayland

پروتکل Wayland همانند پروتکل X11، تعریفی‌ست برای داده‌های دو-دویی که شما می‌توانید انتظار ارسال و دریافت آنها را از درگاه Wayland و ساختار مرتبط با آن بیت‌های دو-دویی را داشته باشید. این عمل با اندکی تفاوت نسبت به X11 انجام می‌شود، پروتکل در قالب XML که توسط یک اسکنر پردازش به کد C  تبدیل شده است، مشخص شده است. یک پروتکل دو-دویی وجود دارد، و شما به لحاظ فنی می‌توانید آن پروتکل را بدون استفاده از کد بوسیله‌ی اسکنر تبدیل شده Wayland اعمال کنید، اما این چیزی نیست که از شما برای انجام دادن برود.

تفاوت‌ دیگر با X11 این است که با همه چیز همانند یک افزونه رفتار می‌شود - شما با همه اینترفیس‌های پروتکل مرکزی به همان شکلی برخورد میکنید که با افزونه‌هایی که خودتان نوشته‌اید. و شما افزونه‌های زیادی می‌نویسید - برای مثال، پروتکا مرکزی هیچ ساز و کاری برای انتقال بافر به غیر از SHM ندارد، به همین دلیل یک افزونه برای بافرهای drm در mesa وجود دارد.

 کتابخانه کلاینت wayland

یا libwayland. کتابخانه کلاینت Wayland اساساً تنها یک کتابخانه IPC است؛ اندکی شبیه به Xlib و XCB. همچنین برخلاف XCB و Xlib کتابخانه کلاینت Wayland به شکلی وابسته به برنامه از تعریف پروتکل به وجود آمده است. این کتابخنه واقعاً کتابخانه IPC خوبی است.

به هر حال انتظار نمی‌رود که شما از این کتابخانه هم همانند XCB و Xlib استفاده کنید. شما قرار است از یک تولکیت مثل QT یا +GTK، و یا از EGL به همراه انتخاب‌های شما از API (واسط توسعه) های طراحی محور Khronos اگر می‌خواهید متفاوت باشید. آن‌جا همچنین کتابخانه‌ای هم برای خواندن پوسته‌های اشاره‌گر X وجود دارد.

سرور Wayland

اینجا جایی است که مسیرها از هم جدا می‌شوند. هیچ سرور Wayland ای به معنی این که سرور Xorg ای هم باشد وجود ندارد. البته weston وجود دارد، اما weston عمیقاً به قصد محیطی آزمایشی برای حصول اطمینان از عملکرد پروتکل طراحی شده است.

بنابراین محیط‌های میزکار، سرور Wayland خودشان را، خود با استفاده از پروتکل و کتابخانه‌های کلاینت می‌نویسند.

پروتکل Mir؟

ما کمابیش یک پروتکل IPC مشخص داریم، اما نه حقیقتاً. ما قرار نیست که از عملکردهای دگرباره‌ی کتابخانه‌های کلاینت Mir پشتیبانی کنیم، و اگر کسی بخواهد آن‌ها را متلاشی کند هم زحمتی به خرج نمی‌دهیم. جدا از آن ما از  Google Protobuf برای فرمت IPC خودمان استفاده می‌کنیم.

کتابخانه‌های کلاینت Mir

چیزی که تولکیت‌ نویس‌ها استفاده می‌کنند؛ حتی به آن  mir_toolkit هم گفته می‌شود. دوباره تکرار می‌کنم شما احتمالاً نمی‌خواهید که مستقیماً از این استفاده کنید. شما قرار است که از یک تولکیت شل +GTK یا QT استفاده کنید؛ و همانند Wayland اگر می‌خواهید که مستقیماً طراحی کنید، شما از EGL به همراه GL/GLES/OpenVG استفاده خواهید کرد.

سرور Mir؟

کمابیش. در حالی که کتابخانه‌های Wayland همگی درباره IPC هستند، Mir در رابطه با به وجود آوردن کتابخانه‌ای برای انجام دادن کار طاقت فرسای یک کامپوزیتور سرور نمایش است، پس با این حساب بیشتر از Wayland شبیه Xorg است.

در حقیقت، تفاوت اندکی ریزتر است. Mir خالق کتابخانه‌ای برای ساختن فوق‌العاده‌ترین کامپوزیتور سرور نمایش یونیتی است. ما هدفی جز برآورده کردن انتظارات هیچ‌کس جز خودمان را نداریم. همانطور که گفته شد، انتظارات ما بدان شکل هم جزئی نیستند، پس احتمال می‌رود که Mir عموماً پرکاربرد باشد.

این تا حدودی دلیل این قضیه است که چرا گنوم و کی‌دی‌ای آن‌چنان که باید و شاید مشتاق Mir نیستند. آن‌ها در حال حاظر تعداد کارهای سرمایه‌گذاری شده در کامپوزیتورهای Wayland خودشان دارند، پس یک کتابخانه برای ساخت کامپوزیتورهای سرورهای نمایش آن‌چنان هم برای آن‌ها ارزشمند نیست. البته در حال حاظر.

شاید ما آن‌قدر خارق‌العاده شویم که دلیلی شود برای گنوم یا کی‌دی‌ای که کامپوزیتورهای خود را بر مبنای Mir دوباره پایه‌ریزی کنند، اما راه درازی برای پیمودن تا آن موقع وجود دارد.

آخرین باری که من کسی را دیدم که چنین رویکردی را روی Wayland امتحان می‌کرد، مشکلاتی پیرامون ارتباط با پلتفرم mesa EGL داشت، بدین معنی که شما قادر نبودید پروتکل را بدون استفاده از کتابخانه موجود C به راه بیاندازید. مطمئن نیستم که این مشکل تا به این لحظه حل شده باشد.