مطمئنا یکی از بزرگترین و هیجان انگیزترین موضوعاتی که در کنفرانس چند هفتهی پیش توسعهدهندگان مایکروسافت اعلام
شد، زیر سیستم ویندوز برای لینوکس (Windows Subsystem for Linux یا به
اختصار WSL) بود. در این مطلب میخواهیم به این موضوع بپردازیم که چرا
مایکروسافت به پشتیبانی از اجرای نرمافزارهای لینوکسی احتیاج دارد؟
![](/Image/TelerEditor/NewsSS/970a4cdf-f43e-4698-8b08-955ae87c7cba.jpg)
Windows Subsystem for Linux به صورت یک بروزرسانی در تابستان برای ویندوز ۱۰ از
راه خواهد رسید. WSL شامل دو بخش است: هستهی زیر سیستم که شامل نسخههای
پیشنمایش سیستمعامل است و سپس یک بستهی نرمافزاری استاندارد را ارائه
میدهد. هسته زیر سیستم در واقع چیزی است که امکان اجرای API لینوکس را در
بستر ویندوز فراهم میکند و قابلیت اجرای کتابخانهها و نرم افزارهای اجرای
لینوکسی را به صورت مستفیم و بومی در سیستمعامل ردموندیها، شدنی میکند.
این یعنی شما خواهید توانست بَش (bash) و تمامی ابزارهای خط فرمان که از
محیط لینوکس انتظار دارید را در ویندوز هم تجربه کنید.
به گزارش سافت گذر به نقل اززومیت؛مایکروسافت با جدیت زیاد در حال تثبیت موقعیت WSL به عنوان ابزاری برای
توسعه دهندگان است و از منظری خاص توسعهدهندگان وب و سازندگان
نرمافزارهای متنباز را پشتیبانی میکند. بسیاری از توسعهدهندگان با بَش و
ساخت نرمافزار با استفاده از make و gcc و نیز ویرایش متن با vi یا emacs
آشنایی دارند. WSL نسخهای از این ابزارها را در اختیار توسعهدهندگان
قرار خواهد داد که دقیقا مشابه با نمونهی آنها در لینوکس است؛ چراکه با
اقدامات جدید مایکروسافت شما دقیقا لینوکس را به صورت کامل در ویندوز تجربه
خواهید کرد.
![windows 10 bash](http://cdn01.zoomit.ir/2016/4/6baed00e-e148-47ce-b30f-3e0f248a733e.jpg)
با چنین تمرکزی در بخش توسعهدهندگان، اما مایکروسافت از WSL به عنوان
یک پلتفرم گسترشدهنده پشتیبانی نمیکند. به عنوان مثال امکان دارد بتوان
وب سرور آپاچی را تحت WSL اجرا کرد و نیز امکان دارد توسعهی آن مفید باشد،
اما هدف این نیست که اپلیکیشنهای کاربردی با چنین پیکربندیای اجرا شوند.
باز شدن راه اپلیکیشنهای سایر پلتفرمها در ویندوز
WSL در واقع از پروژهی Astoria منشا گرفته است. هدف این پروژه قابلیت
اجرای اپلیکیشنهای اندروید بر روی ویندوز ۱۰ موبایل است. انتظار میرود
پشتیبانی از API های مورد نیاز اندروید بسیار قوی باشد که همین عامل باعث
میشود توجه به سایر بخشها در این زمینه کاهش یابد. این گفته یعنی
درحالیکه پشتیبانی از اپلیکیشنها باید گسترش یابد، اما ویندوز قادر
نخواهد بود تا تمامی برنامههای لینوکسی را اجرا کند. در اینجا خبری از
کرنل لینوکسی نیست، بنابراین پشتیبانی از فایل سیستمهایی مانند ZFS یا
btrfs در ویندوز وجود نخواهد داشت. بهنظر میرسد اپلیکیشنهایی مانند
Wireshark که درخواست دسترسی سطح پایین به دستگاههای سختافزاری را دارد،
احتمالا به همین صورت قابلیت اجرا شدن در ویندوز را نخواهد داشت و برای
اینکار باید اپلیکیشن یاد شده را برای ویندوز پورت کرد. WSL همچنین شامل
هیچ زیر سیستم گرافیکی نمیشود و فقط برای اپلیکیشنهای ابزار خط فرمان در
نظر گرفته شده است.
اینکه مایکروسافت تصمیم گرفته از اجرای نرم افزار لینوکس در ویندوز
پشنیبانی کند، به خودی خود یک حرکت بسیار شگفتانگیز است؛ ولی سوال مشخص
این است که چرا؟ بر خلاف انتظار بسیاری افراد، پاسخ این سوال آسان است.
چراکه توسعهدهندگان، این ابزارها را دوست دارند و پشتیبانی از این ابزارها
باعث خوشحالی آنها خواهد شد. اما داستان کمی عمیقتر از این حرفها است.
پشتیبانی از اپلیکیشنهای لینوکس در ویندوز با توجه به اینکه مایکروسافت
بیش از ده سال را به توسعه API های اختصاصی و پلفترم اپلیکیشنهای خود صرف
کرده، یک حرکت قابل توجه است. این تصمیم در واقع برای ارائهی ابزارهای
بیشتر جهت رفاه بیشتر توسعهدهندگان گرفته شده و قطعا برای اتخاذ چنین
تصمیمی عوامل بیشتری نیز وجود دارد.
تا ۱۵ سال پیش ویندوز تنها پلتفرم جدی برای توسعهدهندگان نرمافزاری
بود. همچنین لینوکس در بخش سرورها یک انتخاب بسیار مهم به شما میرفت؛ اما
در آن سالها در دسکتاپها جایگاه مناسبی نداشت و این اتفاق تا کنون هم
ادامه یافته و بیشتر افرادی که به کد نویسی علاقه زیادی دارند از آن
استفاده میکنند. OS X نیز در آن سالها در نخستین دورههای رشد خود به سر
میبرد و فقط بر روی دستگاههای بسیار گرانقیمت با سختافزار مناسب قابل
اجرا بود. این عوامل باعث شده بود تا ویندوز به عنوان یک انتخاب پیشفرض
برای توسعه توسط بسیاری از افراد انتخاب شود. میتوان بهراحتی گفت در آن
زمان هنوز رقیب مشابه خوبی برای ویندوز وجود نداشت.
تا ۱۵ سال پیش ویندوز تنها پلتفرم جدی برای توسعهدهندگان نرمافزاری بود.
البته پشتیبانی از لینوکس در ویندوز به خودی خود پیامد دیگری هم برای
مایکروسافت و سیستمعاملش دارد و آن امکان پشتیبانی ویندوز برای
استفادههای سمت سرور است. یک مثال بسیار خوب برای این مورد، سرور بانک
داده MYSQL است. درحالیکه این بانک داده امروزه نسبت به گذشته بسیار بهتر
شده، اما همیشه از آن به عنوان دومین انتخاب خوب یاد میشود و از نظر
قابلیتهای فنی و نیز یکپارچگی دادهها، PostgreSQL اساسا بسیار بهتر عمل
میکند. اما با این وجود به دلیل پلتفرم توسعهپذیر بهتر، MYSQL در
بازارهای امروزی بیشتر مورد توجه قرار گرفته است. این بانک داده را میتوان
بهراحتی و از طریق نصبکنندهی آن در ویندوز نصب کرد. MySQL یک نرمافزار
ویندوزی بسیاری مناسب برای مدیریت دادهها و بانکهای اطلاعتی و نیز ساخت
پرس و جوها (Query) محسوب میشود و درایورهای ODBC بسیار خوبی هم دارد. در
سمت دیگر بهنظر میرسد توسعهدهندگان PostgreSQL هیچ یک از این موارد را
در اولویت خود ندارند و نیز امکان اجرای آن در ویندوز وجود ندارد و در واقع
میتوان گفت آنچه MySQL با روشی آسان ارائه میدهد را در اختیار کاربر
نمیگذارد.
پس جای تعجبی هم نیست که چرا MySQL نسبت به PostgreSQL بیشتر گسترش یافته و مورد استفاده قرار میگیرد.
اما وضعیت همیشه به این صورت پیش نخواهد رفت. ایجاد محیط توسعهی Ruby
در ویندوز بسیار سخت است. اجرای Ruby در هر پلتفرمی به صورت ناقص و نا کامل
و به اصلاح خودمانیتر دست و پا شکسته، است؛ ولی این شرایط در ویندوز بدتر
نیز میشود. محیط توسعهی پرطرفدار و محبوب node.js نیز در OS X و Linux
ایجاد شده و برای مدتی طولانی نمیتوان آن را با کارایی بالا و مشابهی با
سیستمعاملهای یاد شده، اجرا کرد. Salvatore Sanfilippo که توسعهدهندهی
NoSQL است نسبت به استفاده از وصلههای نرمافزاری (Patch) برای اجرای بانک
داده مورد استفادهاش در ویندوز، اجتناب میورزد و این به دلیل دشمنی وی
با مایکروسافت نیست؛ بلکه به این دلیل است که وی نیازی به انجام اینکار
نمیبیند. به عقیدهی او، میتوان بهجای اینکار از نمونههای مشابه
نرمافزار مورد اشاره در ویندوز بهره گرفت و هیچ چیز نباید مانعی برای
توسعهی محصول اصلی شود.
![میاکروسافت و لینوکس](http://cdn01.zoomit.ir/2016/4/f38d3aed-061b-4cc4-9303-91956c9f26c2.jpg)
مشخصا ویندوز به طور کامل ناپدید نشده، اما دیگر آن پلتفرمی نیست که
اکثرا آن را داشتند و استفاده میکردند. اما چرا اینگونه نیست؟ زیرا دو
رقیبی که در سال ۲۰۰۰ چندان به چشم نمیآمدند حالا واقعا توسعهی زیادی
یافتهاند. لینوکس را از بسیاری جوانب نمیتوان پتلفرمی دانست که استفاده
از آن در دسکتاپها راحتتر از سایر سیستم عاملها باشد، بخصوص برای کسانی
که قصد استنفاده از آن در یک لپتاپ جدید را داشته باشند؛ اما نسبت به
میزان استفاده از آن در این روزها واقعا پتانسیل بالاتری دارد. همچنین OS X
به لطف ترکیب طراحی سختافزاری مناسب اپل و پردازشگرهای x86، به گزینهای
بسیار مناسب برای تعداد زیادی از توسعهدهندگان مبدل شده است.
مشخصا ویندوز به طور کامل ناپدید نشده؛ اما دیگر آن پلتفرمی نیست که اکثرا آن را داشتند و استفاده میکردند.
واقعیت این است که به مدت چند سال، اپل تنها لپتاپهای x86 مقرون به
صرفه و کاربردی را تولید کرده که استفاده از آنها نیز لذتبخش است و این
گفته اصلا اغراق نیست. به عنوان مثال مکبوک ایر استاندارد جدیدی را برای
وزن و اندازه تعیین کرده و درحالیکه مدلهای اولیه این محصول واقعا
گرانقیمت محسوب میشدند، اما رفته رفته قیمت آن کاهش یافت. رایانههای
سنتی رومیزی نیز میتوانند خود را با تغییرات مطابقت دهند و حتی
تولیدکنندگان این نوع محصولات نظیر لنوو هم اکنون تمایل به ساخت محصولاتی
گرانقیمت دارند که بتوان آنها را با تغییرات هماهنگ کرد. اپل نیز در این
زمینه، محصولاتی را ارائه میکند که در واقع ترکیبی از قیمت بالا، قدرت
زیاد و قابلیت حمل بالایی دارند و در بخش سیستمعامل نیز به مقدار زیادی از
کدهای FreeBSD استفاده کرده است. البته که تفاوتهایی بین سیستمعامل OS X
و FreeBSD وجود دارد و لینوکس بر روی یک سرور اجرا میشود؛ اما نسبت به
ویندوز، شباهتهای دو سیستمعامل یاد شده بیشتر از تفاوتهای آنها است.
آنچه اپل انجام داده در واقع باعث میشود تا هر محقق رایانهای یا
دانشجویان مهندسی نرمافزار بتوانند با هزینهای کم، محیط یونیکسی کار خود
را داشته باشند و جای تعجب ندارد که این سیستمها گسترش بیابند. محبوبیت
پایدار اپل در سانفرانسیسکو و درهی سیلیکون قطعا یکی از عوامل مهم رشد
سیستمعاملی مانند iOS به عنوان یک پلفترم برای اپلیکیشنها است. افراد
باهوشی که تحصیل آنها در دانشگاه تمام شده یا به هر دلیل دیگری از آنجا
خارج شدهاند، تحت فشار شرکتهای ویندوز محور آمریکایی قرار نگرفتهاند.
این افراد میتوانند در فرهنگی که به اپل احترام گذاشته میشود رشد کنند و
همهی آنها توسط این کمپانی دوست داشتنی صاحب مکبوک پروهای زیبای خود
میشوند. ویندوز هم البته با طرفداران جامعهی متنباز مشکل خاصی ندارد و
فقط روش انتخاب شدهی این شرکت دقیقا بر اساس تفکر چنین افرادی نیست.
موضوع یاد شده مشکلی است که مایکروسافت به آرامی آن را تشخیص داد. این
شرکت به طور کلی در زمینه اعلام نیازهایش در جامعهی توسعهدهندگان کنونی
خود خوب عمل میکند؛ اما این اتفاق با نوعی نزدیکبینی صورت میگیرد. هر
مورد دیگری که خارج از چهارچوب مد نظر ردموندیها باشد، چشمپوشی خواهد شد.
به عنوان مثال Visual Studio C و C++ هنوز هم به صورت کامل از C99
پشتیبانی نمیکند. C99 در واقع نسخهای از زبان برنامهنویسی C است که حدود
۱۷ سال قبل به صورت استاندارد درآمد. به دلیل درخواستهای مکرری که
مایکروسافت دریافت کرده بود، در نهایت پشتیبانی از C99 را نیز انجام داد و
در این زمینه همیشه مقاومت از خود نشان داده است. البته توسعهدهندگان
ویندوز به زبان C99 کد نمینویسند؛ پس در این صورت نیازی به پشتیبانی از آن
هم نخواهد بود و این جمله منطقی به نظر میرسد.
اما در اصل، ماجرا از این قرار است که به دلیل عدم توانایی کامپایلرهای
C و C++ در ویندوز برای کامپایل کدهای C99، توسعهدهندگان نمیتوانستند با
این زبان در سیستمعامل مایکرسافت برنامهنویسی کنند. در کنار این موضوع،
جامعهی متن باز از C99 با آغوشی گرم استقبال میکند و حالا کدهایی را
تولید میکند که به راحتی در محیط ویندوز نمیشد آنها را کامپایل کرد و
این در شرایطی است که در صورت امکانپذیر بودن، احتمالا بسیاری از
توسعهدهندگان ویندوز میخواهند بهخوبی از چنین کدهایی استفاده کنند؛ ولی
به دلیلی که اشاره شد، این قابلیت را نداشتند. افراد کدهایی را مینوشتند
که بخشی از ویندوز محسوب نمیشدند و نیازهای آنها نیز در اولویت قرار
نمیگرفت. به نظر میرسد که در چند سال اخیر اهالی ردموند به این مشکل پی
بردهاند و با ارائهی جدیدترین نسخههای C++ سعی در رفع آن نمودند؛ ولی
هنوز دقیقا مشخص نشده که چه زمانی پشتیبانی کامل از C99 انجام خواهد شد.
همین قضیه به صورت مشابهی در مورد همخوانی با یونیکس و محیط Shell و
بخصوص فضای کاربری آن، نیز وجود دارد. هر توسعهدهندهی جوان و فعالی که
دانشگاه را به اتمام میرساند، قصد دارد تا با bash و make و سایر این
ابزارها بتواند به راحتی کار کند. ممکن است ویژال استودیو مناسب به نظر
برسد، اما در واقع با هدف این دانشجویان غیر مرتبط است. مایکروسافت هم
البته به صورت کامل از این موضوع بی اطلاع نیست.
![microsoft loves linux](http://cdn01.zoomit.ir/2016/4/6e89bd6b-9880-4e5f-999b-4ca1e9c887e6.jpg)
اما آنچه در نهایت میبینم تلاشهای فردی برای پورت کردن ابزارهای مختلف
در ویندوز است. اما مایکروسافت نیز با کمک مالی و توسعه، به پورت کردن
node.js برای ویندوز سعی خود را در این زمینه انجام داده است. node.js به
طور بسیار عمیقی به I/O نا همگام متکی است که این روش در پلتفرمهای مختلف
تفاوتهایی دارد. بسیاری از افراد در نهایت اما قبول دارند که نتیجهی کار
در مورد node.js به نرمافزاری بهتر تبدیل شده و روش ویندوز برای این هدف
بسیار خوب ارزیابی شده است. در واقع ناهمگامیها به بخشهای کوچکتری تبدیل
شدهاند تا در نهایت به صورت کتابخانههای مخصوص به خود درآیند. برای مثال
libuv را میتوان نام برد که در نوع خود واقعا خوب عمل میکند و node.js
نیز یکی از اعضای این کتابخانه به حساب میآید. مایکروسافت به روش مشابهی
redis را نیز پورت کرده تا بتوان آن را در ویندوز اجرا کرد.
تلاشهایی که از جانب مایکروسافت برای اجرای ابزارها و نرمافزار لینوکس
بر روی ویندوز انجام شده، واقعا با ارزش هستند؛ اما هنوز نمیتوان آن را
کامل دانست. این شرکت نمیتواند هر پروژهای را پورت کند و این درحالی است
که سازندهی node.js یعنی Ryan Dahl, به این نکته پی برده که پشتیبانی از
ویندوز واقعا با ارزش است و مایل است تا به منظور پشتیبانی node.js از
ویندوز، حتی تغییرات قابل توجهی را در نرمافزار خود اعمال کند. این اقدام
البته توسط همهی توسعهدهنگان ابزارهای لینوکسی انجام نمیشود و بسیاری از
این توسعهدهندگان تفکری مانند Dahl ندارند.