سلام
دلیل اینکه اینکه این اتفاق افتاده، بیشتر به خاطر معماری کرنل لینوکس هست.
چندین معماری مختلف برای کرنل هست. من فقط میکرو کرنل (micro kernel) ، کرنل یکپارچه (monolithic kernel) و کرنل پیوندی (hybrid kernel) رو به طور خلاصه میگم.
توی کرنلهای یکپارچه، درایورها، IPC و ... جزیی از خود کرنل هستند و داخل خود فضای کرنل قرار دارند. درایورها هم به تمام حافظه کرنل دسترسی دارند و میتونند هر کاری انجام بدن.
کرنل لینوکس یه کرنل یکپارچه هست.
یه معماری دیگه به اسم میکرو کرنل هم هست. توی این معماری، کرنل فقط یه قسمت کوچک هست که کارهای خیلی پایهای رو انجام میده (مثل راهاندازی سیستم و IPC). بقیه کارها، توسط برنامههای دیگه انجام میشن.
اون برنامهها، هر کدوم فضای حافظه جدایی دارند و هیچکدوم داخل فضای کرنل نیستند.
این کرنلها معمولا انعطافپذیری بالایی دارند. کرنل هرد یه میکرو کرنل هست.
کرنلهای پیوندی سعی کردند ساختاری شبیه میکرو کرنل داشته باشند ولی مثل کرنلهای یکپارچه پیاده بشند تا مزایا کرنلهای یکپارچه و میکروکرنل رو با هم داشته باشند. ولی در واقعیت، بیشتر از اینکه مزایا دوتا رو داشته باشند، معایب اونها رو دارند. کرنل ویندوزهای xp و جدیدتر، از این نوع هست.
توی کرنل لینوکس معمولا لازمه هر ماژول (درایورها یه جور ماژول هستند) برای هر نسخه متفاوت کرنل جدا کامپایل بشه. خیلی بعیده که یه ماژول از یه نسخه دیگه کرنل، روی نسخه دیگهای درست کار کنه.
لازم نیست تفاوت نسخهها خیلی باشه. حتی اگه از نظر عددی نسخهها یکی باشن ولی یکی چندین خط کد با یکی دیگه تفاوت داشته باشه، لازمه ماژولها برای هر کدوم جدا کامپایل بشن. بعیده ماژولهای این یکی، درست روی اون یکی کار بدن. (البته ممکنه با توجه به تفاوتها، درست هم کار بدن، ولی احتمالش کمه)
اگه درایور از روتینهای خیلی خاصی از کرنل استفاده نکرده باشه، معمولا میشه بدون تغییر کد، اون درایور رو برای نسخههای متفاوت کرنل کامپایل کرد.
ولی بعضی وقتا یه سری تغییرات جدی رو کرنل داده میشه و ممکنه اون کدی که قبلا بدون مشکل کامپایل میشده، الان نیاز به تغییر داشته باشه تا بتونه کامپایل بشه.
به همین دلیل، بعضی وقتا درایورهایی که همراه پروژه اصلی کرنل نیستند، بعد از یه بروزرسانی کرنل، کامپایل نمیشن و باید صبر کنید تا توسعهدهنده تغییرات لازم رو اعمال کنه.
درایورهایی که همراه پروژه اصلی کرنل لینوکس هستند، توسط خود توسعهدهندههای کرنل بروزرسانی میشن و یهو چنین مشکلی برای اونها پیش نمیاد.
معمولا وقتی پشتیبانی از یه سختافزار وارد پروژه اصلی کرنل میشه، تا مدت زیادی (معمولا حدود ۲۰ سال) داخل کرنل میمونه. فکر کنم یه مدت پیش، کد درایورهای مربوط به سختافزارهای خیلی قدیمی (مربوط به ۲۰ تا ۳۰ سال پیش) از کرنل برداشته شدند. دلیلش هم این بود که دیگه کسی زیاد از اون سختافزارها استفاده نمیکرده.
توی ویندوز، به خاطر اینکه ساختار کرنلش فرق داره، لازم نیست درایورها برای هر نسخه متفاوت کرنل جدا کامپایل بشه و معمولا درایوری که با نسخههای قدیمی درست کار میکرده، بدون نیاز به کامپایل دوباره، روی نسخههای جدیدتر هم درست کار میده.
...
۴- واقعا فکر نمیکنید یکم گنو لینوکس اصلاح نشدست و میتونه پیشی بگیره با تغییراتی؟
ممنون
اگه از یه میکرو کرنل استفاده کرد، شاید وضعیت بهتر بشه. مثلا کرنل هرد. ولی چون این کرنل توسعهدهنده زیادی نداره، توسعه اون خیلی کند پیش میره.
برای مشکلی که دارید، خطاهای مرتبط رو قرار بدید. شاید بتونیم راهنمایی کنیم که با تغییر کدوم قسمتهای کد اون درایور، مشکل حل بشه.