لینوس توروالدز هسته لینوکس را به استاندارد مدرنتر C11 بهروزرسانی میکند
همه میدانیم که لینوکس با زبان C نوشته شده است. نکتهای که احتمالاً از آن اطلاع ندارید، این است که این سیستمعامل برپایهی یکی از استانداردهای قدیمی زبان C، یعنی نسخهی سال ۱۹۸۹ (C89)، توسعه داده شده است. این استاندارد با نام ANSI X3.159-1989 یا ANSI C نیز شناخته میشود. لینوس توروالدز قصد دارد هستهی لینوکس را به استاندارد مدرنتر C11 ۲۰۱۱ بهروزرسانی کند.
ZDNet اشاره میکند که انتقال هستهی لینوکس از C89 به C11 آنقدرکه بهنظر میرسد، بزرگ نیست. C89 هنوز تقریباً بهطور جهانی پشتیبانی میشود. ازآنجاکه هر کامپایلر C با نسخههای قبلی سازگاری دارد، برای کامپایل یا اجرای برنامههای مبتنیبر C89 مشکلی نخواهید داشت. بنابراین، یک کامپایلر سازگار با C11 مشکلی در اجرای کدهای قدیمی C89 نخواهد داشت.
این تغییر زمان موردتوجه توروالدز قرار گرفت که بهمنظور اصلاح مشکلی امنیتی بالقوهای با توابع اجرای حدسوگمان ابتدایی فهرست پیوندی هسته، مشکل دیگری در وصلهی امنیتی آشکار شد. توروالدز همگام برطرفکردن این مشکل متوجه شد که تکرارکنندهی ارسالشده به ماکروهای فهرست پیشنمایش در C99 باید در محدودهای خارج از حلقهی خود اعلام شود.
تورولدز دربارهی فهرست پستی کرنل لینوکس (LKML) گفت:
کل دلیلی که امکان دارد این نوع باگ غیرگمانهزنی رخ دهد، این است که ازنظر تاریخی، به سبک C99 متغیرهای «اعلانکردن متغییر در حلقه» نداشتیم. بنابراین، list_for_each_entry() و همهی موارد دیگر اساساً همیشه آخرین ورودی HEAD را از حلقه بیرون میزند؛ زیرا نمیتوانیم متغیر تکرارکننده را در خود حلقه اعلام کنیم.
حال، پاسخ چیست؟ درنهایت، از C89 به استاندارد جدیدتر C مهاجرت کنید؛ زیرا این تغییر باعث میشود چنین مشکلی رخ ندهد. بنابراین، زمان نگاهکردن به استاندارد C99 فرارسیده است. این استاندارد که بیش از ۲۰ سال از عمر آن میگذرد، بهاندازهی کافی جدید است و امکان اعلام متغیرهای سطح بلوک را فراهم میکند.
آرند برگمان، از توسعهدهندگان هستهی لینوکس، این را پذیرفت که ارتقا به استاندارد جدید C انجامپذیر است. وی اعلام کرد امکان حرکت بهسمت استاندارد C11 ۲۰۱۱ وجود دارد. ازآنجاکه C99 هرگز محبوبیت زیادی نداشته و C11 پشتیبانی استاندارد چندرشتهای را معرفی کرده تا امنیت این زبان بیشتر برود، استفاده از این استاندارد جدیدتر اقدامی مثبت محسوب میشود.
استفاده از استاندارد جدید C11 اقدامی آسان خواهد بود. درحالحاضر، حداقل نسخهی کامپایلر C هستهی لینوکس، یعنی GCC نسخهی ۵٫۱، از C11 پشتیبانی میکند.
توروالدز پس از اطمینان از اینکه استاندارد جدید C بدون مشکل در هستهی لینوکس کار میکند، تصمیم گرفت این اقدام را نهایی کند. وی قصد دارد این تغییر را در نسخهی ادغامی ۵٫۱۸ آزمایش کند. ازآنجاکه چهارچوب ادغام ۵٫۱۸ تقریباً بهپایان رسیده است، احتمال دارد ماه مارس شاهد کدهای C11 در هستهی لینوکس باشیم.
جاناتان کوربت، یکی دیگر از توسعهدهندگان هستهی لینوکس، هشدار داده است که امکان دارد اتفاقات زیادی با ادغام و انتشار نسخهی ۵٫۱۸ رخ دهد. انتقال به نسخهی جدیدی از استاندارد زبان C میتواند شگفتیهای زیادی بهدنبال داشته باشد. کوربت معتقد است اگر همهچیز خوب پیش برود، تغییر به C11 در نسخهی بعدی هسته اعمال خواهد شد.