وضعیت کرنل لینوکس در ۲۰۲۰

رسمی هست که بعضی‌ها هر سال وضعیت کرنل رو بررسی می‌کنم. منظورم وضعیت کد، فایل ها، کامیت‌ها و برنامه‌نویس هایی است که این کامیت‌ها رو انجام دادن. بر اساس آمار اولین روز ۲۰۲۰، کرنل لینوکس ۲۷میلیون و ۸۵۲هزار و ۱۴۸ خط است۷ شامل داکیومنت‌ها، کانفیگ ها، ابزارهای یوزر اسپیس و ..). این کرنل ۸۸۷هزار و ۹۲۵ کامیت داشته که محصول کار ۲۱۰۷۴ نفر آدمه. این ۲۷.۸ میلیون خط کد، در ۶۶هزار و ۴۹۲ فایل تقسیم شده.

در طول ۲۰۱۹، کرنل لینوکس ۷۴۷۵۴ کامیت دریافت کرده که از تاریخ ۲۰۱۳، پایین ترین رقم است! کامیت‌ها در سال‌ ۲۰۱۸ و ۲۰۱۷، حدود ۸۰هزار تا بوده و در ۲۰۱۶ حدود ۷۷هزار تا ودر سال های ۲۰۱۴ و ۲۰۱۵، ۷۵هزار. این کمتر شدن نویسندگان در مقایسه ۲۰۱۹ و ۲۰۱۸ هم وجود داشته. در ۲۰۱۹ تعداد نویسندگان ۴۱۸۹ بوده که کمی کمتر از عدد ۴۳۶۲ مربوط به سال ۲۰۱۸ است و البته بیشتر از عدد ۴۰۴۲ سال ۲۰۱۷. البته این کم تر شدن کامیت‌ها، در سطح کد تاثیر زیادی نداشته و با ۳میلیون و ۳۸۶هزار و ۳۴۷ خطی که امسال به کرنل اضافه شده (و البته ۱میلیون و ۶۹۶هزار و ۶۲۰ خط حذف شده)، میزان رشد کنترل تقریبا شبیه هر سال است.

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

برای دیدن اطلاعات بیشتر می تونین به صفحه گیت استت نگاه کنین و برای درک بهتری از پروژه، این خروجی cloc است که کارش شمردن خطوط کد و نمایش آماری اون است. اگر count lines of code یا همون cloc رو روی کرنل اول ۲۰۲۰ رو اجرا کنیم، نتیجه اینه:

   66449 text files.
   66000 unique files.                                          
   11119 files ignored.

github.com/AlDanial/cloc v 1.82  T=67.33 s (822.2 files/s, 388799.5 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
C                                    27961        2761653        2292505       14061980
C/C++ Header                         19875         531782         956091        4300989
reStructuredText                      2153         101820          53725         270579
Assembly                              1320          46971         101470         230117
JSON                                   273              0              0         161955
Bourne Shell                           577          13299           9690          52817
make                                  2531           9485          10644          41766
SVG                                     58            117           1364          36216
Perl                                    59           6021           4422          30642
Python                                 118           4987           4588          26256
YAML                                   325           5205           1449          25529
yacc                                     9            697            359           4810
PO File                                  5            791            918           3077
lex                                      8            326            300           2015
C++                                     10            320            129           1933
Bourne Again Shell                      51            356            297           1765
awk                                     10            140            116           1060
Glade                                    1             58              0            603
NAnt script                              2            146              0            551
Cucumber                                 1             28             50            174
Windows Module Definition                2             15              0            109
m4                                       1             15              1             95
CSS                                      1             28             29             80
XSLT                                     5             13             26             61
vim script                               1              3             12             27
Ruby                                     1              4              0             25
INI                                      1              1              0              6
sed                                      1              2              5              5
---------------------------------------------------------------------------------------
SUM:                                 55360        3484283        3438190       19255242
---------------------------------------------------------------------------------------

اگر هم دوست دارین کرنل رو درک کنین۷ این کتاب قدیمی شروع خوبیه «درک کرنل لینوکس / لینک آمازون.

منبع اصلی

کارت ویزیتی که لینوکس اجرا می‌کنه

امروز توی خبرهای لینوکس این مطلب خیلی جذاب شده و همه در موردش حرف می‌زنن. یه برنامه نویس سیستم‌های امبدد کارت ویزیت یا بیزنس کارتی که درست کرده رو معرفی می‌کنه. می گه علاقمند به چیپ‌های خیلی ارزونی است که می‌تونن لینوکس ران کنن و تا اونجا پیش رفته که چیپ‌هایی داره که می‌شه مجانی به این و اون دادشون. بعد با خودش فکر می‌کنه که چرا از این‌ها یه کارت ویزیت لینوکسی درست نکنه و الان به اون عکس بالا رسیده که البته اونطرفش نشون می ده که می تونین بزنینش به یه پورت یو اس بی:

اگر این کامپیوتر رو به یه کامپیوتر دیگه وصل کنین، در تقریبا ۶ ثانیه بوت می‌شه و علاوه بر یه فولدر که توش فایل هایی مثل رزومه و اینها هست، یه پورت سریال هم به شما می‌ده که اگر از طریقش به لینوکسی که داره روی کارت ویزیت وصل می شه وصل بشین، می‌تونین به چند بازی جمع و جور لینوکسی کامند لاینی و یه ۲۰۴۸ و حتی یه مفسر میکروپایتون دسترسی داشته باشین. همه اینها روییه چیپ ۸ مگی با یه بوت لودر ۲۵۶کیلویی و یه کرنل ۱.۶ مگی پیاده سازی شدن. کل فایل سیستم روت ۲.۴ مگ بیشتر نیست و هوم هم قابل نوشتن است.

قیمت؟ همه این سیستم روی هم کمتر از ۳ دلار قیمت داره و البته کماکان اگر کسی اونو بگیره، یعنی خیلی جدی گرفته شده (:

برای توضیحات بیشتر در مورد مراحل ساخت و طراحی اینجا رو ببینین.

کالی لینوکس جدید و قابلیت‌هاش، بخصوص تم مخفی جدید برای هکرهای اجتماعی

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

حالا شرکت آفنسیو سکیوریتی در نسخه آخر ۲۰۱۹، قابلیتی برای حل این مشکل در محیط ایکس اف سی ای گذاشته که اسمش Undercover است و می شه به راحتی از منو پیدا و اجراش کرد. این قابلت می تونه محیط کالی لینوکس شما رو بدون حتی نیاز به لاگین مجدد، شبیه ویندوز بکنه تا دیگه در جاهای عمومی، توجه بیش از حد جلب نکنین. از جمله آپدیت‌های دیگه این نسخه می شه به موارد زیر هم اشاره کرد:

  • دسکتاپ ایکس اف سی ای که دیفالت است تا تجربه کاربری بهتری بسازه
  • پشتیبانی از پاورشل که باعث می شه بتونین اسکریپت های پاورشل رو مستقیما در کالی اجرا کنین
  • مستندات کالی به /docs منتقل شدن و روی گیت هستن که می شه بی دردسرها اونها رو آپدیت کرد

همچنین کرنل رزبری پای به ۴.۱۹.۸۱ آپگرید شده و گفته شده که با اینکه نسخه فعلی نیاز به یک اس دی ۸ گیگ داره، نسخه های ۲۰۲۰، برای اجرا نیاز به اس دی های ۱۶ گیگ خواهند داشت.

برای دریافت نسخه آخر می تونین به سراغ سایت کالی لینوکس برین یا اگر همین الان اونو دارین، با این دستور آپگریدش کنین:


apt update && apt -y full-upgrade

تی ماکس، ابزار دست حرفه‌ای‌های کامند لاین

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

توسعه دهنده مایکروسافت فاش کرد که حتی روی آژر هم لینوکس بیشتر از ویندوز سرور استفاده می شه

سه سال و نیم قبل، سی تی او آژر – کلاود مایکروسافت – گفته بود که «یک چهارم ماشین های آژر لینوکس هستند». بعد توی سال ۲۰۱۷ مایکروسافت گفت که ۴۰٪ ماشین های مجازی ساخته شده روی آژر، لینوکس هستند. در ۲۰۱۸ اعلام شد که این عدد تقریبا نصف ماشین ها است و حالا ساشا لوین که توسعه دهنده کرنل لینوکس در مایکروسافت است، در درخواست خودش برای عضویت مایکروسافت در لیست سکیوریتی کرنل لینوکس، نوشته که «استفاده از لینوکس در کلاود ما از ویندوز بیشتر شده».

البته این کاملا قابل پیش بینی بود اما کماکان اتفاق افتادنش جالبه. لینوکس به هرحال اکثریت اینترنت رو می‌چرخونه و استفاده از سرور ویندوز هم همه این سال‌ها در حال افول بوده.

معاون رییس اجرایی مایکروسافت اسکات گوتهری می گه که لینوکس هر ماه داره بالاتر میاد و برخی از سرویس های آژر اصولا با لینوکس درست شدن. اون می گه از ده سال قبل که ASP.NET بازمتن شد، فهمیدن که هر توسعه دهنده ای می تونه از بازمتن بهره ببره،‌نه به عنوان چیزی خوب که به عنوان موضوعی لازم. اون می گه این بحث کد نیست، بحث جامعه است. در نهایت هم اضافه می کنه که به اعتقادش الان مایکروسافت بزرگترین پشتیبان پروژه بازمتن در جهان است.

منبع

خروجی عجیب پایپ لاین یونیکس، این رو امتحان کنین و سوادتون رو عمیق تر کنین

اگر از یونیکس / لینوکس / مک و کامند لاین های مشابه استفاده می کنین خروجی این دستور رو چک کنین:

(echo red; echo green 1>&2) | echo blue

خروجی به شکل جالبی ممکنه هر کدوم از اینها باشه:

blue
green

یا

green
blue

یا

blue

حتی به شکلی جالبتر ممکنه روی یک کامپیوتر و یک شل، بعد از چند بار تکرار نتیجه دیگه ای بگیرین. می دونیم که رفتارهای عجیب کامپیوتر معمولا مربوط به درک ناقص ما از ماجرا مربوط هستن وگرنه تقریبا هیچ وقت هیچ چیز خیلی عجیب و غریبی اتفاق نمی‌افته (: بخصوص به شکل مستمر.

اما ببینیم اینجا وضع چیه. ما داریم دو تا کامند echo اجرا می کنیم و خروجی رو پایپ می کنیم به یک echo دیگه. مساله اینه که پرانتز یک شل جدید درست می کنه و اکو دستور داخلی شل است. پس ما دو تا اکو داریم که با هم مسابقه می ذارن.

توجه کنید که اگر echo red اجرا بشه، خروجی اش به عنوان ورودی به echo blue داده می شه که تاثیری نداره.

یک چیز دیگه رو هم اینجا باید بلد باشیم و اون SIGPIPE است. توی یونیکس پروسه رو با سیگنال ها کنترل می کنیم و وقتی می گیم kill -9 folan در واقع با فرستادن سیگنال ۹ به فلان، مجبورش کردیم سریعا قطع بشه. یک سیگنال SIGPIPE هم داریم که برابر عددی اش ۱۳ است و وقتی ارسال می شه که یک پروسه سعی کنه روی پایپی که بسته شده بنویسه. این کار باعث پایان کار اون پروسه می شه. این رو هم می دونیم که echo دستور داخلی است و وقتی در داخل یک شل اجرا می شه، تنها یک پروسه داره – حتی اگر دو بار اجرا بشه.

حالا برگردیم سر عبارت قشنگمون:

(echo red; echo green 1>&2) | echo blue

ما اینجا سه تا اکو داریم، که دو تاشون به هم وصل هستن، دو تاشون در یک گروه (فورک شل) و یکیشون در یک گروه دیگه (سمت چپ) که به خاطر وجود پایپ سعی می کنن موازی اجرا بشن و مسابقه می‌دادن برای سریعتر بودن: حالت های مختلف این هستن:

  1. هر دو اکوی سمت چپ تموم می شن و بعد اکوی سمت راست اجرا می شه. اینجا اول سبز چاپ می شه و بعد آبی
  2. اکوی قرمز چاپ می شه (و کاربردی نداره چون به ورودی اوکی بعدی تبدیل شده که بی معنیه) و بعد اکوی آبی تموم می شه و بعد اکوی سبز. در اینجا SIGPIPE نداریم چون اکوی سمت چپ در حال اجرا است و نتیجه «آبی سبز» خواهد بود.
  3. اول از همه اکوی آبی اتفاق می افته و قبل از اینکه اکوی قرمز تموم بشه و چیزی روی پایپ بیاد، SIGPIPE رو می فرسته. اینکار کل شل داخل پرانتز سمت چپ رو می بنده و نتیجه فقط آبی است

چنین چیزهایی در دنیای واقعی تقریبا کاربرد ندارن ولی باعث دانش و درک عمیقتر ما از یونیکس و سیستم عامل ها می شن. امیدوارم لذت برده باشین و امیدوارم با لذت بیشتر، بحث سیگنال های یونیکس رو از اینجا بخونین همچنین منبع اصلی رو هم نگاه کنین چون جواب های کاملتری هم داره.

لینوس توروالدز می خواد کمی از لینوکس فاصله بگیره و به کارهاش فکر کنه

لینوس امروز در یک حرکت غیرمنتظره ایمیلی به میلینگ لیست کرنل زده و گفته که «لازم دارم که بخشی از رفتارم رو تغییر بدم و می خوام معذرت بخوام از کسانی که رفتار من اذیتشون کرده و احتمالا به خاطر برخورد من، کلا توسعه کرنل رو کنار گذاشتن»

توروالدز برای جدیتش توی پیشبرد پروژه کرنل و شوخی نداشتنش در تذکر حماقت، ضعف و بد بودن کد دیگران مشهوره. البته بارها گفته شده که معمولا حمله اش به سمت افراد نیست و به کد اونها حمله می کنه اما به هرحال همین هم می تونه افراد بسیاری رو، دپرس کنه. آخرین کشمکش هم مربوط به نشست نگهدارنده‌های کرنل بود که توش حدود ۴۰ نفر از توسعه دهنده ها و نگه دارنده‌های اصلی جمع می‌شن دور هم تا گپ بزنن ولی امسال چون توروالدز ماجرا رو فراموش کرده بود و یک برنامه دیگه تنظیم کرده بود، مجبور شدن برنامه رو از کانادا به اسکاتلند منتقل کنن تا توروالدز هم بتونه بیاد!

توروالدز در توضح ماجرا گفت که از ماجرا شرمگین است و ناراحته که تقویم رو اشتباه کرده و اضافه کرد که واقعا امیدوارم بود دیگه لازم نباش این برنامه رو بره؛ هر چی باشه تقریبا ۲۰ ساله که هر سال همین برنامه رو رفته. در ادامه توروالدز نوشت که ناراحته که این برنامه براش اهمیت چندانی نداره و احتمالا این مساله احساسات کسانی که حسابی مساله براشون مهمه رو جریحه دار می کنه.

در نهایت توروالدز اشاره کرده به اینکه درک آدم ها براش راحت نیست و می دونه که رفتارش باعث شده فضای توسعه کرنل غیرحرفه ای پیش بره و این خوب نیست و نسبت به اینکه گاهی حتی تلاشش برای رسیدن به یک پچ بهتر،‌جنبه حمله شخصی پیدا کرده بسیار متاسفه.

توروالدز گفته که لازمه بخشی از رفتارش رو عوض کنه و می خواد از کسانی که ناراحتشون کرده معذرت بخواد و بهتره کمی به خودش وقت بده و کمک بگیره تا آدم ها رو بهتر درک کنه. البته بحثش کنار رفتن کامل نیست بلکه نیاز به یک استراحت داره و حس نمی کنه که نمی خواد به توسعه کرنل ادامه بده. بلکه برعکسه و علاقمند است کاری که تقریبا ۳۰ ساله روش وقت گذاشته رو ادامه بده؛ ولی بعد از کمی استراحت.

در مورد باگ های اسپکتر و ملت‌داون مطالب دست اول بخونین

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

خلاصه باگ های اسپکتر و ملت داون در این سه شکل قابل طبقه بندی است:

  • شکل یک: دور زدن بررسی محدوده (CVE-2017-5753)
  • شکل دو: تزریق شاخه مقصد (CVE-2017-5715)
  • شکل سه: گول زدن کش کننده دیتا (CVE-2017-5754)

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

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

راستی.. کل ماجرا رو گفتم که بگم مقاله گوگل خواندنی است و قابل درک؛ با حوصله و سرچ های جانبی و حالا که خودمونی شدیم این بحث بامزه رو هم بگم که اول گوگل این باگ رو کشف می کنه و به اینتل گزارش می ده، و مدیر عامل اینتل چیکار می کنه؟ تمام سهامی اینتلی که داشت و می تونست بفروشه رو می فروشه! (: