ریشههای عجیب یک خطای قدیمی یونیکس: چرا سیستمعاملها از ماشین تحریر میگویند؟ — "Traditional, but Puzzling"
خلاصه
بررسی ریشه تاریخی یکی از عجیبترین خطاهای سیستمعاملهای یونیکس یعنی Not a typewriter که چگونه به خطاهای مدرن ایمیل و ترمینال پیوند خورده بود. این مقاله نشان میدهد که چطور تصمیمات طراحی قدیمی و کدهای نامتعارف برای دههها در سیستمهای نرمافزاری باقی میمانند.
مقدمه ای بر یک خطای عجیب تاریخ سیستمعاملها
اگر با سیستمعاملهای مبتنی بر Unix کار کرده باشید، احتمالاً با خطاهای مرموز و عجیبوغریب مواجه شدهاید که در نگاه اول هیچ سنخیتی با مشکل واقعی ندارند. در دهه ۱۹۹۰ میلادی، کاربران برخی از این سیستمعاملها هنگام ارسال ایمیل با خطایی مواجه میشدند که کاملاً گیجکننده بود: 550 mwichary... User unknown: Not a typewriter.
این خطای عجیب، حاصل تداخل و تقاطع چهار عامل مختلف در طراحی نرمافزار و تاریخچه محاسبات بود که بررسی آن لایههای جالبی از تکامل سیستمعاملها را آشکار میکند.
کالبدشکافی خطای sendmail
ریشه این مشکل به چند بخش مجزا تقسیم میشود:
- حساسیت به حروف بزرگ و کوچک: نرمافزار sendmail در پشت صحنه فرض را بر این میگذاشت که نام کاربریها همیشه با حروف کوچک هستند. نام کاربری «MWichary» به شکل خودکار به «mwichary» تبدیل میشد که وجود خارجی نداشت و برنامه به جای توضیح منطق خود، نتیجه نهایی را اعلام میکرد.
- خطایابی اضافی (Meta-error): سیستم sendmail خطای درست «User unknown» را تشخیص میداد، اما به طور خودکار مقدار خطای سیستمعامل را هم به آن اضافه میکرد تا اطلاعات دیباگ کاملتر شود.
- معنای واقعی Not a typewriter: مقدار خطای سیستمعامل در این زمینه کاملاً بیربط بود. این عبارت (که امروزه به صورت
Inappropriate ioctl for deviceشناخته میشود و کد خطای آنENOTTYاست) به این معناست که یک برنامه در پسزمینه در حال اجراست و قرار نیست ورودی کاربر را ب받د یا چیزی برای خواندن کاربر چاپ کند. - مسئله نگارش و گرامر: استفاده از یک علامت دو نقطه (colon) بین دو پیام باعث میشد کاربر احساس کند خود سیستمعامل او را یک ماشین تحریر فرض کرده است!
ریشه تاریخی اصطلاح TTY
چرا این پیام به این شکل نوشته شده بود؟ پاسخ در تاریخچه کامپیوترها نهفته است. در دوران اولیه، کامپیوترها به ماشینهای تحریر به عنوان ابزار ورودی و خروجی متصل میشدند. برخی از این ماشینهای تحریر محلی و برخی از راه دور بودند که به آنها teletypewriter یا به اختصار teletype و حتی tty میگفتند.
عبارت «این دستگاهی است که من نمیتوانم ورودی/خروجی روی آن انجام دهم» در دوران اولیه به عبارت کوتاه «Not a typewriter» تبدیل شد. جالب اینجاست که این رشته متنی دههها پس از منسوخ شدن ماشینهای تحریر و جایگزینی آنها با پایانههای متنی و برنامههای ترمینال مدرن، همچنان در کدها باقی مانده بود.
نگاه توسعهدهندگان در هکرنیوز
بحث پیرامون این مقاله در Hacker News نکات جالبی را از سوی مهندسان به همراه داشت:
- یکی از کاربران اشاره کرد که مغز انسان به طور ناخودآگاه
ENOTTYرا به صورتE-NO-TTY(خطای نبود ترمینال) تفسیر میکند که به معنای واقعی امروزی آن نزدیکتر است تا معنای اصلی و تاریخیاش یعنیE-NOT-TY(خطای عدم وجود ماشین تحریر). - برخی دیگر به خطاهای عجیب مشابه در دنیای واقعی اشاره کردند؛ مانند پیامی در یک پارکینگ که پس از پرداخت دستی و خروج با خودرویی دیگر نمایش داده میشد:
Payment Declined: Exit permitted. - همچنین خطای کلاسیک
lp0 on fireدر لینوکس به عنوان نمونهای دیگر از پیامهای خطای مبهم چاپگرها یادآوری شد.
چرا این موضوع برای مهندسان نرمافزار اهمیت دارد؟
این داستان یادآور اهمیت میراث نرمافزاری (Software Legacy) است. بسیاری از تصمیمات مهندسی که امروز گرفته میشوند یا کدهایی که مینویسیم، ممکن است دههها بعد همچنان در زیرساختها باقی بمانند؛ حتی زمانی که زمینه فنی و سختافزاری کاملاً تغییر کرده باشد. شناخت این ریشهها به توسعهدهندگان کمک میکند تا درک بهتری از رفتار ابزارها و سیستمعاملهایی داشته باشند که روزانه با آنها سر و کار دارند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل