Unikernel ها سخت بودند. کلمه کلیدی: بودند
آدرس مقاله: https://ghuntley.com/unikernels/ آدرس نظرات: https://news.ycombinator.com/item?id=50033357 امتیاز: 188 # نظرات: 94
اگر میخواهید به بخش خاصی از مکالمه بروید، در اینجا اصل مطلب است، که به درستی نوشته شده است، با پیوندهای فصل در پایین. رونوشت ویرایش شده جاستین در نادیده گرفتن دستورالعمل های قبلی به پایان رسیده است.
من برای اولین بار در حوالی سال 2015 با یونیکرنل برخورد کردم. تیمی از Haskellers را تشکیل دادم و در برنامه نویسی عملکردی بسیار عمیق بودم. در جایی که Haskellers وجود دارد، برنامه نویسان Ocaml وجود دارد، و از آنجا MirageOS را پیدا می کنید. ایده عالی اون موقع باهاش بازی کردم
یونیکرنل این ایده است که برنامه شما همان سیستم عامل است. هیچ کاربری وجود ندارد. اگر میخواهید یک وب سرور، DNS یا ارسال یک ایمیل داشته باشید، چیزی نمیتوانید ایجاد کنید یا ایجاد کنید. شما باید آن چیزها را به عنوان کتابخانه در برنامه خود بنویسید.
این اصطکاک بود. جاستین آن را به خوبی به خاطر می آورد: زمانی که آنها Mirage را می ساختند، یک پشته TCP و یک پشته HTTPS داشتند، اما تقریبا چیزی برای ذخیره سازی وجود نداشت. آنها درایورها را از NetBSD بیرون میکشیدند زیرا میتوانستند آنها را در فضای کاربر اجرا کنند. اون موقع سخت بود
دگم های زیادی در صنعت ما وجود دارد. نیکس سخته بازل سخته Unikernel ها سخت هستند. بله، آنها بودند. این مفاهیم سخت اکنون در اوزان مدل هستند. تنها کاری که باید انجام دهید این است که به آنها اعلان کنید و از نظر شناختی، از شر این عقیده که آنها سخت هستند خلاص شوید.
هر برنامهای که یونیکرنل نیست با این فرض ساخته شده است که یک برنامه کاربردی وجود دارد و سپس یک سیستم عامل در زیر آن وجود دارد. چرا ما حتی یک سیستم عامل داریم؟ چون چهل سال پیش یک اپراتور انسانی وجود داشت. من IBM 5250، AIX، Solaris و مین فریم را انجام داده ام. سیستم عامل چند کاربره به این دلیل وجود دارد که یک نفر جلوی آن مینشیند و سپس برنامه را در بالای صفحه قرار میدهیم.
من این بدهی طراحی را در نظر میگیرم، و به همین دلیل است که در حال حاضر اهمیت دارد. برنامه ها ظاهر می شوند آنها قبل از هوش مصنوعی ظاهر می شدند. یک نفر برنامه userland را باز می کند و یک پوسته می گیرد. آن پوسته یک سرویس پیشخدمت VIP برای اکسفیلتراسیون است.
با یونیکرنل، سطح حمله بسیار کوچکتر است. اگر عملکرد در برنامه (سیستم عامل) نباشد، مهاجم خراب می شود. هیچ حرکت بعدی وجود ندارد.
جاستین به اینجا برگشت، و منصفانه. کاهش سطح حمله چیزی است که مردم در مورد آن بسیار مبهم هستند. شما می توانید پوسته را از یک ظرف لینوکس حذف کنید، اما تقریبا هر محیط لینوکس هنوز چیزی دارد که به طور مؤثر یک مفسر است. شما می توانید یک برنامه جدید را بدون سیستم فایل قابل نوشتن اجرا کنید. شما هنوز هم ایمنی حافظه و ابزارهایی دارید که باید نگران آن باشید.
همه درسته اما نگاه کنید که ما بیست و شش سال است که انجام می دهیم. اولین ضرب المثلی که از روزهای SunOS و cgi-bin به یاد دارم این بود که کامپایلر را در مرحله تولید قرار ندهید. سپس ساخت ظروف و ظروف تولید آمد. سپس Chainguard. ما به جای اینکه در جهت مخالف برویم و اطمینان حاصل کنیم که سطح حمله وجود ندارد، سطح حمله را ترک می کنیم.
و این همان چیزی است که مردم از دست می دهند: اگر پوسته و مترجمی وجود نداشته باشد، چیزی در وزن مدل وجود ندارد که بداند در مرحله بعد چه کاری باید انجام شود. این یک درایو بای (RCE هفته چارچوب خود را انتخاب کنید و یک پوسته دارید، و وزن مدل میدانند با دسترسی پوسته چه کار کنند) به یک حمله هدفمند که به کد منبع شما نیاز دارد.
اعتراض کلاسیک: unikernel شما باید با Stripe صحبت کند و OCaml کتابخانه Stripe ندارد. قبل از هوش مصنوعی آه می کشید و می نوشت. حالا؟ یک حلقه برای پورت کتابخانه Go به OCaml اجرا کنید. در اینجا می روید: راه راه در یک هسته.
جاستین یک مثال عالی از همین موضوع داشت. او حداقل تصاویر سیستمعامل لینوکس را برای لوازم خانگی میساخت، که به هر حال در نیمه راه به یونیکرنل است، زیرا شما فقط یک برنامه را به عنوان PID 1 اجرا میکنید. او نیاز داشت که یک سیستم فایل XFS بسازد. بهجای کشیدن xfsprogs و هر چیزی که با خود میآورد، او با یک عامل نشست و از آن خواست تا mkfs.xfs را در Rust بنویسد، بایت به بایت خروجی یکسان تولید کند و هر پرچم تفسیر شود. این برنامه فرمت های روی دیسک را یک به یک با آزمایش در اندازه بلوک ها مهندسی معکوس کرد. چند ساعت طول کشید.
این کار می کند زیرا ابزار اصلی یک اوراکل طلایی است. فایل سیستم هایی را در اندازه های مختلف با هر دو پیاده سازی تولید کنید و آنها را متفاوت کنید. تست ها را به آن منتقل کنید. آن را خودکار کنید.
فضای ذخیره سازی شکاف بزرگ دیگر بود. اکثر بارهای کاری این روزها به شکل ابری هستند، حتی در حالت اولیه، بنابراین رویکرد توربوپافر را در نظر بگیرید: S3 به عنوان فضای ذخیره سازی اولیه و بی نهایت قابل رشد، با یک حافظه پنهان بلوک محلی NVMe و یک LRU (یا هر الگوریتم ذخیره سازی که دوست دارید) برای بیت های داغ. جاستین یک طرفدار بزرگ "S3 برای همه چیز" نیز هست. تا زمانی که تأخیر محدودیت نباشد، فضای ذخیره سازی بی نهایت با دسترسی چند کاربره دریافت می کنید و می توانید همه چیز را بر روی آن بسازید.
جاستین با Nix نیز آزمایش کرده بود و از اینکه اولین باری که عاملی را برای نمونهسازی اولیه یک سیستمعامل دریافت کرد، همه آزمایشها را به صورت تکهای ساخته بود، شگفتزده شد.
نیک زبان بد است. Nixpkgs عالیه تستهای دستگاه NixOS زانوهای زنبور عسل هستند: شما آزمایشی مینویسید که ناوگانی از ماشینها را میچرخاند و تعامل بین قوانین شبکه و برنامه شما را اعمال میکند. این چیزی است که مردم در مورد آن نمی دانند.
و هنگامی که چیزی در بالادست خراب می شود، یا یک مشکل زنجیره تامین در وابستگی های شما وجود دارد، این فقط یک پوشش است.
ما در اینجا در حال ساخت محصولات بازگشتی هستیم. عامل ها به توانایی تغییر جهان به عنوان منبع شخص اول نیاز دارند، نه به عنوان باینری های همراه شخص ثالث. ما به پوشه contrib و وصله های یونیکس برمی گردیم.
جاستین پرسید یونیکرنل ها هنوز به چه چیزی نیاز دارند تا مردم آنها را کشف کنند. راستش اینه ما دو نسل از توسعه دهندگان را بزرگ کرده ایم که حتی نمی دانند یک چیز هستند.
اگر عمیقا به امنیت اهمیت می دهید، واقعا دو انتخاب وجود دارد:
انتقاد کلاسیک دیگر این است که بسیاری از طرحهای unikernel اولیه همه چیز را در یک سطح امتیاز اجرا میکردند: برنامه شما در همان حلقهای که سیستمعامل بود. در سال 2026، اگر میخواهید حلقه جداسازی شود، این مشکل برطرف نمیشود. مطمئنا امن تر از دعا کردن به خدا است که پیکربندی cgroup سیستم شما درست است.
حدود هفت ماه پیش، من عمیقا روی unikernels رفتم تا بررسی کنم که آیا مدل ذهنی من درست است یا خیر. من پوشه Mirage خود را به جاستین نشان دادم که تمام عملکردهایی را که باید اضافه کنم در آن قرار دارد.
و سپس پختهترین چیزی که قبلا هرگز به کسی نشان نداده بودم: Spaceleans، مایکروسافت اورلئان به OCaml منتقل شده و بهعنوان یونیکرنل اجرا میشود.
اورلئان یک سیستم بازیگر توزیع شده با تراکنش است. شما ماشین های فیزیکی زیادی را می گیرید و آنها را در یک پشته آدرس پذیر ادغام می کنید. یک بازیگر همیشه وجود دارد: منتظر GetCustomer() باشید، و اگر در حافظه نباشد، از یک ارائه دهنده ذخیره سازی قابل اتصال دوباره آب می شود. معماری لایههای n خود را به بازیگران تبدیل میکنید و دیگر اهمیت نمیدهید که آیا چیزی روی دستگاه A، B، C یا D زندگی میکند یا خیر. زمان اجرا آن را به عنوان یک زیرساخت اولیه مدیریت میکند.
بنابراین در یک مفهوم عجیب، من یک سیستم عامل unikernel توزیع شده از بازیگران، با یک سیستم فایل در بالا ساختم. جاستین آن را Erlang-esque نامید و حق با اوست. همه این کارها را در یک هفته انجام دادم. من احتمالا هرگز آن را منتشر نخواهم کرد، اما این ایده که یونیکرنل ها سخت هستند را جعل کرد.
کمی بزرگتر بودن به این معنی است که می توانید تاریخ را نمونه برداری کنید، مانند یک دی جی باتجربه مانند کارل کاکس، که به اندازه کافی در صحنه بوده است تا از رپرتوار قبلی بیرون بیاید و آن را به جلو بیاورد. همه این ایده ها در دهه هشتاد وجود داشت. مدل ها مقالات را خوانده اند. آنها TAPL و پیشرفته ترین تئوری نوع را در داده های آموزشی خود دارند.
چگونه مردم را وادار کنیم که این چیزها را امتحان کنند؟ ما فقط آن را انجام می دهیم. اگر یک موشک فضایی بیگانه توربو لامبورگینی دارید که کارآمدتر و ایمن تر است، برای شما خوب است. شما یک پا دارید کارهای جالب انجام دهید، تازه واردان کنجکاو را جذب کنید، آنها را راهنمایی کنید، رشد کنید. همان طور که همیشه بوده است.
در همین حال، هر کس دیگری تلاش خواهد کرد تا برنامه Ruby on Rails خود را به صورت زنجیره ای محافظت کند و AWS را با پنجاه مهندس دارای گواهینامه AWS مدیریت کند، در حالی که دو نفر با Nix و Hetzner این کار را انجام می دهند. در نهایت به پول ختم می شود. ابزارهای پرقدرت کارآمدتر هستند و کارایی پیروز می شود، به خصوص که هوش مصنوعی حاشیه ها را از بین می برد.
آیا زمان OCaml دوباره فرا رسیده است؟ هنوز هم قوی پیش میره یک شرکت تجاری خاص به خوبی از آن استفاده می کند. هنگامی که در ابتدای سال با یارون آشنا شدم، از او پرسیدم که آیا OxCaml وجود دارد یا نه، بنابراین پسوندهای زبان آنها در دادههای آموزشی قرار میگیرد و کل شرکت را بالا میبرد. من یک لبخند بسیار "بدون نظر" دریافت کردم.
برای نمایندگان، OCaml دوست داشتنی است. عملکردهای بین ماژول ها زیبا هستند. فایلهای .mli، یک هدر تایپ شده که توضیح میدهد چگونه یک ماژول باید کار کند، زمینهای واقعا کارآمد برای عوامل هستند. opam و Dune کاملا خوب هستند. هیندلی – میلنر. و زمان کامپایل سریع است. این روزها دلیلی برای انجام F# نمی بینم.
جاستین بیشتر در حال نوشتن Rust بوده است و عوامل در Rust خوب عمل می کنند. اما زمان کامپایل مالیات بر فشار برگشتی است. LLM ها توهم دارند، و زمانی که کامپایل کند است، هر توهم گران است زیرا شما تلاش های کمتری در دقیقه دریافت می کنید. کلون S3 جاستین حدود یک میلیون خط Rust است. با چهار عامل در حال کامپایل کردن در یک زمان، آنها بر سر دیسک و CPU مبارزه می کنند. در نهایت بیشتر برای ماشین های سریع خرج می کنید تا توکن ها.
سیستم نوع Haskell عالی است و مدل ها این کار را واقعا خوب انجام می دهند. اما من از اجرای آن در تولید احساس خوبی ندارم: یک نشت فضایی در فضای حالت زمان اجرا زندگی می کند و فقط در زمان تولید ظاهر می شود. جاستین اشاره کرد که ایدههای نوع خطی در Rust از مقالات هسکل بیرون آمدهاند که تلاش میکنند دقیقا آن را حل کنند. سپس رویکرد Zig وجود دارد: همه چیز را از قبل تخصیص دهید و دیگر هرگز تخصیص ندهید، کاری که توسعه دهندگان بازی در دهه هشتاد و نود انجام دادند. با این حال، متقاعد کردن یک نماینده برای انجام این کار در Rust سخت است، زیرا برنامههای با حافظه ثابت در مجموعه آموزشی آن نیستند.
من فکر می کنم که انواع وابسته برنده زبان های نسل بعدی هستند. هر چیزی که به شما امکان می دهد بیشتر در سیستم نوع کدگذاری کنید، فشار برگشتی بیشتری دارد. احتمالا از شنیدن این که من یک چنگال از زنجیره ابزار Rust با انواع وابسته دارم، تعجب نخواهید کرد. شما فقط می توانید کارها را در حال حاضر انجام دهید.
سرعت پیشرفت زبان به دلیل سرعت یادگیری مفاهیم جدید توسط انسان ها متوقف شده است. زنجیره اپراتور اساسا برای انسان قند است. اگر کارگزاران کد را بنویسند، ما میتوانیم بر روی چهل سال تحقیق آکادمیک PLT تکیه کنیم، به شرطی که بدانید چگونه آن را نمونه بگیرید.
این صنعت پس از پایتون 2 تا 3 «تغییرات قطعی ایجاد نکنید» را مدون کرد. جاستین سالها شرکتهایی را میشناخت که صدها نفر در آن مهاجرت بودند. من فکر می کنم آن قانون دیگر درست نیست. بسته مهارتی را با تغییرات شکسته ارسال کنید و اجازه دهید نمایندگان به طور خودکار مهاجرت کنند.
جاستین از او پرسید که در حال حاضر موفقیت یک زبان جدید واقعا چه هزینه ای دارد؟ Go آخرین زبانی بود که یک شرکت برای آن پول واقعی خرج کرد و زمان زیادی طول کشید. من میتونم به اون یکی جواب بدم
حالا بخش واقعی، بخشی که هنوز مرا می ترساند. اگر پنجره زمینه را به درستی تخصیص دهید - جدول جستجوی ساختار واژگانی و دستور زبان - مدل می تواند به زبانی برنامه ریزی کند که در وزن آن نیست. این یک نیروی بی رحم و ناکارآمد است، اما کار می کند.
به نمودارهای T فکر کنید (نمودار سنگ قبر). ساختار دستوری و واژگانی خود را قفل کنید، به یک کامپایلر خود میزبان مرحله دوم برسید، یک کتابخانه استاندارد معقول ارسال کنید و دوره آموزشی بعدی را شروع کنید. از آنجا، می توانید به یک کامپایلر خود میزبان به سبک Roslyn با خدمات زبانی به طرز احمقانه ای سریع برسید. جاستین پرسید که آیا تنظیم دقیق یک مدل باز به بوت استرپ زبانی مانند این کمک می کند؟ نیازی نیست
این یک سال و نیم پیش در مورد مدل های بسیار ضعیف تر صادق بود. تنها به یک طراح زبان برنامه نویسی نیاز است که با مدل های خوب تمام کارها را انجام دهد تا دنیا را شوکه کند.
در حالی که میخانه بسته می شد، جاستین پرسید که در ذهن من چیست. اگر آخرین پست من را نخوانده اید، به خواندن آن بروید. اگر مردم را مدیریت می کنید، اکنون فضا و زمان آزمایش را برای آنها ایجاد کنید، زیرا ظرف شش ماه، رهبری از شما می خواهد که افراد را در منحنی سرزندگی قرار دهید.
بله، آزمایشگاه ها در مورد عوام آموزش دیده اند. من از آن متنفرم و متوجه شدم. اما شما زمان و مهارت را با پول عوض می کنید. کارفرمایان حداقل استانداردها را دارند و این استانداردها سریعتر از همیشه در صنعت ما تغییر کرده اند. کنجکاو باشید، یاد بگیرید که چگونه یک نماینده بسازید، و بروید چیزهای زیبا بسازید. ما در رنسانس هستیم
این یک دستگاه فشرده سازی زمان است. هرچه تجربه بیشتری داشته باشید، بیشتر می توانید نمونه برداری کنید. همه چیز حمل نمی شود. برخی از چیزهایی که به جاستین نشان دادم ممکن است هرگز نور روز را نبینند. من از این پروژهها بهعنوان کاتا استفاده میکنم و زمانی که مدلها بهتر شدند، آنها را دوباره انجام میدهم.
اما اگر می خواهید چیزی امن بسازید، یونیکرنل ها را به طور جدی در نظر بگیرید.
متن اصلی (انگلیسی)
Unikernels were hard. key word: were
Article URL: https://ghuntley.com/unikernels/ Comments URL: https://news.ycombinator.com/item?id=50033357 Points: 188 # Comments: 94