لاغر بودن بعضی وقتا تو دنیای لینوکس دردسر داره.
مثال بزنم آلپاین ذاتاً برای «سبک بودن» ساخته شده، نه برای «راحت بودن»
تریدآف رو باس درنظر بگیری زیر پوستش به جای glibc از musl استفاده میکنه. این تفاوت کوچیک روی کاغذ، تو عمل تبدیل میشه به منبع دردسر... خیلی از باینری ها و پکیج ها تو دنیای لینوکس واسه glibc کامپایل شدن و وقتی میرسی به آلپاین، یا اصلاً اجرا نمیشن یا برای مثال npm و pip مجبور میشن همه چیز رو از سورس بسازن. همون لحظه ای که میبینی npm install به جای چند ثانیه، چند دقیقه داره میچرخه و cpu میره بالا، دقیقاً تاوان ماسل رو میدی…
این موضوع تو پروژههای nodejs خیلی پررنگ تره، مخصوصاً وقتی نیتیو ماژول داری. پکیج هایی مثل bcrypt یا sharp یا بدتر از اون canvas روی آلپاین تقریباً همیشه دردسر دارن. نتیجه اش این میشه که مجبوری git و python3 و make و ++g نصب کنی، node-gyp راه بندازی و عملاً آلپاین مینیمال رو کثیف میکنی.
از اون طرف پرفورمنس هم داستان خودش رو داره. ماسل سبک تره ولی سریع تر نیس. برای سرو فایل استاتیک با nginx اصلاً مهم نیست، اما اگه بک اند نود یا پایتون پرمصرف داشته باشی، مخصوصاً زیر لود، تفاوتش با دبیان یا راکی خودش رو نشون میده. این اختلاف معمولاً تو تست های کوچیک دیده نمیشه، ولی تو پروداکشن و ترافیک واقعی یهو میفهمی چرا بعضی تیم ها آلپاین رو فقط برای ران تایم خیلی ساده نگه میدارن.
اگه پای پایتون وسط باشه، آلپاین واقعاً میتونه شکنجه بشه. پکیج هایی مثل numpy و pandas و pillow معمولاً wheel آماده برای glibc دارن، ولی برای آلپاین نه. نتیجه اش بیلدهای طولانی، ارورهای cryptic و گاهی fail کامل بدون راه حل تمیزه. خیلی از تیم ها دقیقاً به همین دلیل اصلاً سراغ آلپاین برای پایتون نمیرن.
حتی تو بحث شبکه هم ماسل بعضی وقت ها رفتارهای عجیبی داره. dns resolve یا ssl هندشیک ممکنه روی آلپاین تایم اوت بده ولی همون کد روی اوبونتو کاملاً سالم اجرا بشه. اینا از اون باگ هایی اند که پیدا کردنشون زمان میبره و آخرش میفهمی مشکل از کدت نبوده، از لیب سی بوده.
و در نهایت آلپاین فقط وقتی ارزش داره که واقعاً مینیمال بمونه مخصوصاً واسه ران تایم حفظ بشه. به محض اینکه برای بیلد مجبور میشی کلی ابزار نصب کنی و مولتی استیج رو هم درست رعایت نکنی، هم حجم ایمیج میره بالا هم زمان بیلدش، و اون مزیت اصلی آلپاین عملاً نادیده گرفته میشه. به شخصه تو سناریو مینیمال که به glibc نیازه دبیان اسلیم رو گزینه معقولی میدونم.
@DevTwitter | <Amir Husayn Panahifar/>