پس از اینکه استیو بالمر سکان هدایت مایکروسافت را به ساتیا نادلا سپرد، شاهد چرخش ۱۸۰ درجهای در سیاستهای متن باز غول فناوری جهان بودیم. مایکروسافت که زمانی لینوکس را غدهای سرطانی مینامید، اکنون یکی از بزرگترین حامیان لینوکس و پروژههای متن باز است.
با ورود ساتیا نادلا به مایکروسافت، سیاستهای این شرکت بزرگ در قبال بسیاری از مسائل تغییرات بنیادینی را تجربه کرد؛ لینوکس از جملهی مواردی بود که مایکروسافت پس از ورود مدیرعامل جدید، رویکردی دوستانه در قبال آن پیدا کرد؛ تارا راج، یکی از مدیران پروژهی زیرسیستم ویندوز برای لینوکس یا Windows Subsystem for Linux است که تجربیات خود را طی مقالهای در مدیوم به اشتراک گذاشته است. در ادامه میتوانید تجربیات این مدیر مایکروسافت را در خصوص لینوکس از زبان خودش مطالعه کنید.
تمام مدتی که در مایکروسافت مشغول به کار بودهام، در حال ساخت ابزارهایی برای توسعهدهندگان لینوکس بودم. من در اوت ۲۰۱۶ بعد از فارغالتحصیلی در رشته علوم کامپیوتر و کارآفرینی از دانشگاه ویرجینیا به مایکروسافت ملحق شدم. بیشتر تجربهی من در برنامهنویسی در طول مدت دانشگاه به زبان ++C و سیستمعاملی که بیشتر از همه استفاده میکردم، لینوکس بود.
تجربیات من بهظاهر مناسب جایی مانند مایکروسافت نبود، ولی در آن زمان مایکروسافت در حال تغییر مسیری بنیادی در مهندسی و فرهنگ سازمانی خود بود که باعث شد تمام سیستمهای عامل مهم جایگاهی در مایکروسافت داشته باشند، از جمله لینوکس.
اولین شغل من در مایکروسافت در تیم SQL سرور روی لینوکس بود. از من درخواست شد به تیم آنها بپیوندم تا تجربیاتم را در لینوکس به آنها منتقل کنم. برایم جای تعجب و شگفتی داشت که میتوانستم در همان ابتدا و براساس تجربههایم کار مفیدی برای تیم انجام دهم.
ایدهی ساخت نسخهای از SQL سرور توسط مایکروسافت در سالهای گذشته، ابتدا در حد دروغ روز آوریل بود؛ اما سال ۲۰۱۶ این ایده واقعی شد. من مدت کوتاهی بعد از عرضهی اولین نسخهی برنامه، به تیم توسعه ملحق شدم و روی ارتقاء استفاده از ابزارها برای SQL سرور متمرکز شدم؛ بهخصوص ابزارهایی برای مدیران سیستم تا بتوانند برنامهها و سرور لینوکس خود را مدیریت کنند. اجرای SQL سرور روی لینوکس نیاز به ساخت ابزارهای خط فرمان داشت و باید طراحی آن مانند سایر برنامههای خط فرمان سیستمعامل لینوکس میبود.
من همچنین فرصت طراحی اولین نسخهی گرافیکی ابزارهای SQL سرور برای لینوکس را داشتم؛ ابزارهایی مانند یک شاخه از ویژوال استودیو کد که امروز به آن «آژور دیتا استودیو» میگویند. این برنامه برپایهی الکترون ساخته شده است و بدون در نظرگرفتن سیستمعامل، در تمام نسخههای SQL سرور کاربرد دارد.
در سال اول حضورم در مایکروسافت و کارکردن روی SQL سرور در لینوکس، موفق به یادگیری چیزهای زیادی شدم؛ از جمله یادگیری مدیریت برنامه که توسط آن میتوان فناوری را با تفکر تجاری ترکیب کرد.
تیمهای WSL و Chocolatey و Boxstarter در کنفرانس بیلد ۲۰۱۸ مایکروسافت
در اوت ۲۰۱۷، من بهعنوان مدیر پروژه به تیم توسعه زیرسیستم ویندوز برای لینوکس پیوستم. اولینبار در یک بیانیه بهنام «Bash on Ubuntu on Windows» در رویدادهای بیلد مایکروسافت در سال ۲۰۱۶ بود که راجع به WSL شنیدم. ویدئو بیانیه ابتدا توسط کانال ۹ (Channel9 یک سایت اختصاصی مایکروسافت) بهصورت عمومی در دسترس قرار گرفت و با اعلام این خبر باعث شد تمام اخبار دیگر در رویداد بیلد مایکروسافت کماهمیت جلوه کنند. در رویداد بیلد، کوین گالو (Kevin Gallo) اشارهی کوتاهی در حدود شاید ۲ دقیقه در کل صحبتهای خود به WSL داشت، ولی حاضران با شنیدن این خبر بهشدت هیجانزده شدند و برای اطلاعات بیشتر پافشاری کردند. این هیجان در مقطعی باعث شد، تیم کانال ۹ تصور کنند که حجم زیاد درخواست برای WSL، حمله DDoS است. پروژه ساخت WSL یک موفقیت ناگهانی برای مایکروسافت بود.
گروه توسعهدهنده کنسول ویندوز اولین اشخاصی بودند که فهمیدند کاربران نیاز به WSL دارند. هنگام توسعهی برنامه کنسول ویندوز برای مشتریان، این تیم متوجه شد که کاربران بارها و بارها درخواست چیزی شبیهبه خط فرمان Bash در لینوکس را دارند. در نهایت تیم برنامهنویسی متوجه شد که چرا باید چیزی شبیهبه Bash روی ویندوز بسازیم درحالی که میتوان خود Bash را به ویندوز آورد؟
البته انجام این کار ساده نبود. ساختن زیرسیستم ویندوز برای لینوکس نیاز به ترکیب دانش عمیقی از معماری هسته ویندوز که به کمک تیم کرنل ویندوز ارائه میشد، بههمراه یک فناوری تحقیقاتی مایکروسافت بهنام Pico Process داشت. شاید جالب باشد بدانید که Pico Processes همان فناوری بود که باعث شد SQL سرور روی لینوکس اجرا شود. Pico Process یک نسخه ویرایشنشدهی حالت-کاربر را میزبانی میکند و سپس تیم کرنل ویندوز راه را برای اتصال فراخوانهای سیستمی یا همان سیستم کال (syscalls) از طریق ویندوز فراهم میکنند. به بیان سادهتر، WSL باعث میشود فایلهای باینری کامپایلشده لینوکس روی هسته ویندوز NT بدون کامپایل دوباره برنامهها یا ماشین مجازی اجرا شود.
چیزی که ما در تیم توسعه WSL ننوشتیم، یک توزیع لینوکس بود که تعداد زیادی از آنها در دسترس قرار داشت. اوبونتو اولین انتخاب ما بود که در WSL عرضه شد. ما با دوستانمان در شرکت کنونیکال (Canonical) تماس گرفتیم و از آنها پرسیدم آیا حاضر به کمک به ما برای واقعیتبخشیدن به WSL هستند. آنها مشتاقانه درخواست و ایده را پذیرفتند و در نتیجه اوبونتو امروز در ویندوز استور در دسترس باشد. خود این موضوع هم بسیار جالب است که بدانید، حدود ۶ توزیع لینوکس در ویندوز استور قرار دارد؛ تابهحال کدام فروشگاه اپلیکیشن را دیدهاید که سیستمعامل عرضه کند؟ حدود ۶ توزیع مختلف لینوکس در فروشگاه اپلیکیشن ویندوز وجود دارد.
کدی که ما در مایکروسافت نوشتیم، یک سیستمکال کرنل مناسب لینوکس بوده که رابطی برای فرایندهای لینوکس روی هسته ویندوز بود. در حدود ۳۴۰ فراخوان سیستمی مختلف در لینوکس وجود دارد. سؤال اینجا بود که باید کدام فراخوانها را در WSL قرار میدادیم. در تمام سیستمهای عامل، فراخوانهای سیستمی جدید بههمراه نسخه جدید سیستمعامل عرضه میشود، ولی فراخوانهای قدیمی هیچگاه حذف نمیشوند تا سیستمعامل توانایی سازگاری با برنامههای قدیمیتر را نیز داشته باشد. ابتدا یک موج اولیه از پیادهسازی فراخوانهای سیستمی انجام شد و بعد از آن هر چیز باقیماندهی دیگر را بهصورت «هنوز پیادهسازینشده» قرار دادیم تا تیم WSL بتواند متوجه شود که مردم به چه فراخوانهای سیستمی نیاز دارند و سپس آنها را پیادهسازی کند.
پاسخ به این سؤال که باید چه فراخوانهای سیستمی را پیادهسازی کرد، به این معنا بود که باید با کاربران در ارتباط بود و دید آیا مردم از آن استفاده خواهند کرد یا خیر؛ هدف از بیانیه و ویدئوهای رویداد بیلد از ابتدا همین بود؛ یعنی درخواست از مردم برای استفاده از WSL و فراهمکردن بازخورد. جایی که شما میتوانستید به WSL دسترسی داشته باشید، خود ویندوز است و به کمک برنامه اینسایدر ویندوز که البته هرکسی میتواند به ویندوز اینسایدر ملحق شود و نسخهای از WSL جدید را دریافت کند. ممکن است ابتدا فکر کنید که فقط افراد مشتاق به ویندوز در برنامه اینسایدر شرکت میکنند، ولی این برنامه این روزها بیشتر از ۱۰ میلیون دنبالکننده دارد و آنها به مسائل مختلفی علاقهمند هستند؛ مانند بازی، ارتباط بلوتوث و WSL.
یکی از گروههای علاقمند به اجرای Bash روی ویندوز توسعهدهندگان وب هستند که قصد ساخت برنامه وب را دارند که روی سرورهای لینوکس میزبانی شود. کل روند ساخت اینگونه اپلیکیشنها توسط مجموعهای از دستورهای Bash ایجاد شده است. در کنار این موضوعات، اگر بهدنبال کمک برای ساخت یک اپلیکیشن وب باشید، مثلا روی سایت استک اورفلو (Stack Overflow) بیشتر نمونه کدهایی که در آنجا پیدا خواهید کرد، فقط مناسب اجرا روی لینوکس است و اگر قرار باشد از ویندوز برای کار خود استفاده کنید، این موضوع میتواند بهشدت خستهکننده باشد. معمولا سادهترین راهحل برای توسعهدهندگان وب که با این مشکل روبهرو بودند، استفاده از Mac و MacOS بود که در آنجا کدها بهراحتی اجرا میشدند.
در همان چند هفتهی ابتدایی عرضه WSL در ویندوز، یکی از کاربران سازمانی WSL توانست برنامه XEyes را بهصورت یک برنامه با رابط گرافیکی کاربر روی WSL و X11 اجرا کند. کاری که برنامه XEyes انجام میدهد، تنها کشیدن دو چشم کارتونی روی صفحه مانیتور است که به اشارهگر موس خیره شده و آن را دنبال میکنند، که مناسب استفاده در کامپیوترها با چندین مانیتور است. با این حال بعد از اعلام چنین خبری، تمام رسانههای اجتماعی بهصورت گسترده درباره این برنامه صحبت میکردند.
اجرای برنامه XEyes در WSL
صحبتها و ایدههای گوناگونی راجع به اینکه ما چگونه بازخوردهای کاربران را دریافت کنیم، وجود داشت. روش مرسوم برای انجام این کار، استفاده از خدمات سایت یوزرویس (UserVoice) بود، که با ساخت یک بخش در یوزرویس برای WSL ما صدها ایده مختلف از کاربران دریافت کردیم و هزاران رای برای هر ایده ثبت شده است. سؤال واقعی این بود که آیا باید از گیتهاب استفاده کنیم؟ از آنجا که یکی از اولین کاربران WSL توسعهدهندگان وب بودند، قراردادن WSL روی گیتهاب به نظر منطقی میرسد. ولی WSL یک پروژه متنباز نیست و گذاشتن یک پروژه غیر متنباز در گیتهاب بهنظر عجیب خواهد بود. با این حال ما تصمیم گرفتیم بهسراغ توسعهدهندگان برویم و یک فروم برای مشکلات، بازخوردها و مباحث روی گیتهاب بسازیم. بعد از ساخت این فروم ما هزاران مسئله مختلف در طیف وسیعی از موضوعات را راجع به لینوکس روی ویندوز دریافت کردیم.
تابهحال هزاران نفر برای مسائل WSL در مخزن آن روی گیتهاب همکاری کردهاند و تیم WSL تک تک مسائل را بررسی و با بحث و تبادلنظر در سیستم نظردهی مشکلات گیتهاب، راهحلهایی برای هرکدام پیدا کرده است. اگر قرار باشد کد جدیدی نوشته شود تا ویژگی جدید پیادهسازی به WSL اضافه شده یا یک مسئله را حل کند، این کد نوشته و به پروژه WSL اضافه خواهد شد، که سپس به بیلد سراسری ویندوز اضافه میشود و توسط برنامه ویندوز اینسایدر توزیع خواهد شد. دوره زمانی انجام این کارها میتواند بسیار سریع باشد و تقریبا در عرض چند هفته انجام شود.
در نهایت، با استفادهی افراد بیشتری از WSL و ارسال نظرشان راجعبه ویژگیای که به آن علاقمند هستند یا مشکلی که میخواهند نقص شود، از طریق گیتهاب یا یوزرویس برای تیم WSL این چرخههای زمانی سریعتر خواهد شد و سریعتر در بیلد اینسایدر ویندوز قرار ظاهر خواهد شد. جامعه بخشی از فرایند خلاقیت برای WSL است.
هنگامی که من بهعنوان مدیر برنامه به تیم WSL پیوستم، تمرکزم روی این بود که برنامه را فراتر از یک نسخه آزمایشی ببرم. بیشتر شکایاتی که به دست ما میرسید، از سمت کاربران در مورد سازگاری و کارایی برنامه بود. ولی از دیدگاه من، اگر کاربران راجع به چنین مسائلی نگران هستند، پس از محصول شما استفادههایی جدی دارند؛ شما فقط وقتی به کارایی یک برنامه اهمیت میدهید که چیز عظیمی را بخواهید به کمک آن اجرا کنید. پس با اینکه هنوز کارهای زیادی برای انجامدادن داریم، کاربران ما درخواست انجام کارهای بیشتر و سریعتر با WSL را دارند.
همزمان که قابلیتهای WSL در حال گسترش است، ما WSL را با خود برای توسعهدهندگان دیگر نیز آوردیم، البته جدای توسعهدهندگانی که بهصورت معمول در اکوسیستم مایکروسافت حضور دارند. رفتن به رویدادهایی مانند PyCon و OSCON تجربیات فوقالعادهای بود، توسعهدهندگانی که در این رویدادها حضور داشتند، از حضور کارمندان مایکروسافت در این رویداد تعجب کرده بودند. هنگامی که به آنها گفتیم، قادر به اجرای لینوکس روی ابزارهای توسعهدهنده مایکروسافت هستند، ابتدا کمی شک داشتند. سپس من یک نسخه آزمایشی SQL سرور، WSL و ویژوال استودیو کد را در این رویداد اجرا کردم.
دموی WSL کنفرانس
من تلاش کردم با امتحانکردن برنامههای مورد نظر، شک آنها را برطرف کنم. هنگامی که توسعهدهندگان شروع به اجرای دستورها، اسکریپتهای کوچک و قطعه کدهای خود کردند، تمام مدت واکنشهای عالی بهدست میآوردم؛ مانند: «صبر کن، این واقعا لینوکس است؛ چطور اینکار را کردید؟ چطور من راجعبه این موضوع نمیدانستم؟» درنهایت تمام اینها بدین نتیجه ختم میشد که ما چیزی مرتبط با آنها ساختیم که برایشان بسیار جالب است.
بعد از دریافت شکایتها راجعبه کارایی و سازگاری WSL، ما با رسیدگی به این موضوع، معماری جدیدی را همراهبا WSL 2 ارائه کردیم. نسخهی جدید WSL سازگاری کامل و ۲۰ برابرشدن کارایی برنامه را از طریق قراردادن هستهی لینوکس در قلب ویندوز به ارمغان آورد. ایجاد زیرساخت برای WSL 2 و تماشای اجرای آن در رویداد بیلد ماه مه ۲۰۱۹ (خرداد ۱۳۹۸) گذشته، تجربه فوقالعادهای بود. امروز، WSL نسخه ۲ بهصورت بتا در دسترس قرار دارد.
من با تیمهای دیگر در مایکروسافت همکاری کردم تا بتوانند از WSL در محصولشان استفاده کنند. یکی از این تیمهای بزرگ، تیم ویژوال استودیو کد است که محبوبترین ویرایشگر متن برای جاوا اسکریپت (JavaScript) و NodeJS است. همکاری من با ویژوال استودیو هنگامی صورت گرفت که فهمیدیم توسعهدهندگان با استفاده از WSL میتوانند مزایای زیادی بهدست آورند. در ابتدا کد زیادی نوشته نشده بود ولی هدف اصلی این بود، اشکالزدایی کدهایی که توسط NodeJS در WSL اجرا میشوند را آسانتر کنیم. توسعهدهندگان میتوانند در ویندوز که WSL را اجرا میکند، کد خود را نوشته و نسخه لینوکس NodeJS را هدف قرار دهند و کد را بهصورت بومی در لینوکس اشکالزدایی و توسعه دهند.
اولین اجرای WSL در ویژوال استودیو کد بهمراه NodeJS
هنگامی که این ویژگیها را برای کار با NodeJS ایجاد کردیم، میزان زیادی درخواست مشابه برای پشتیبانی از سیپلاسپلاس، پایتون و دیگر زبانها به سمت ما سرازیر شد. من شیفتهی این ادغام شدم و به آن علاقهمند بودم، که باعث شد نقش جدیدی در خلق ابزار برای توسعهدهندگان لینوکس ایفا کنم. در حال حاضر روی ویژوال استودیو کد برای توسعهدهندگان سیپلاسپلاس روی لینوکس تمرکز دارم. تماشای توسعه از راه دور ویژوال استودیو کد بهصورت زنده در PyCon، امسال تجربهای عالی برای من بود.
با اینکه مدت کوتاهی در مایکروسافت حضور داشتم، بسیار خوشحالم که توانستم در ساخت ابزارهای زیادی برای توسعهدهندگان لینوکس کمک کنم، از پایگاه دادهها گرفته تا سیستمعامل و محیط توسعه مجتمع (IDE). من به مسیر خود در خلق ابزار برای توسعهدهندگان لینوکس ادامه خواهم داد.