Fedora Minimizasyon Hedefi

İkinci Aşama Önerisi

Hedef lideri: Adam Samalik (asamalik)

Problem

Fedora, geleneksel fiziksel/sanal iş istasyonları ve sunucular için çok uygun olsa da, geleneksel kurulumların ötesinde kullanım durumları için genellikle göz ardı edilmektedir.

Bazı modern kurulum türleri - IoT ve konteynerler gibi - büyüklüğe karşı oldukça duyarlıdır. IoT için bu genellikle yavaş veri bağlantıları (güncellemeler/yönetmek için) ve bulut ve konteynerler için büyük ölçekte hacimleridir.

Belirgin bir örnek Systemd’dir — çok faydalı olmasına (herkes Systemd’yi sever) ve her zaman fiziksel sistemlerde bulunmasına rağmen, konteynerlerde nadiren gereklidir. Bu nedenle, paketlerin sadece kullanıcılar oluşturmak amacıyla systemd-sysusers için Systemd gerektirmesi bir problem değildi. Bununla birlikte bu, konteynerlerde önemli bir boyut artışı anlamına gelmektedir.

Bunun yanında, kurulum alanı ile atak yüzeyi ve ilgili CVE’ler arasında doğrudan bir ilişki olduğundan, temel olarak küçültülmüş bir boyut tüm kurulum türleri için faydalıdır.

Vizyon

Binlerce kişisel ve kurumsal katılımcı, yeni sorunları keşfetmek ve altyapılarını modernize etmeleri üzerine deneyler yapmalarını sağlayan zengin bir ekosistem ile hızlı bir şekilde hareket eden modern bir işletim sistemi oluşturmak için Fedora topluluğunda işbirliği yapmaktadır.

Misyon

Açık kaynaklı geliştiricilere, sistem yöneticilerine ve Linux dağıtımcılarına kendileri için uygun olan şeylere odaklanmaları konusunda yardımcı olmak.

Sonuçlar

Fedora popüler bir platformdur, çünkü ekosistemi son teknolojidir ve IoT ve konteynerler gibi modern dağıtımlar için iyi optimize edilmiştir. Bu, birçok insanın kendi ürünlerini doğrudan upstream projelerden bir araya getirmek ve oluşturmak yerine Fedora’yı kullanmalarını sağlamaktadır. Bu, diğer türlü kendi güvenlik ve diğer sorunlarının hızlı bir şekilde çözülmesini isteyen kullanıcıların neden olduğu açık kaynak geliştiricileri üzerindeki baskıyı hafifletmektedir.

Yani:

  • Açık kaynak geliştiricileri, özellik geliştirmeye odaklanabilir

  • Sistem yöneticileri, düzenli güncellemeler de sağlayan önceden oluşturulmuş parçaları kolayca tüketebilir

  • Fedora’ya katkıda bulunanlar (tedarikçiler ve bireyler), geleceğin sorunlarına açık kaynaklı çözümler keşfetmek ve geliştirmek için Fedora topluluğu içinde işbirliği yapabilir

Çıktılar

Özel kullanım durumları Fedora’da tanımlanmıştır. Daha sonra topluluk, geliştirme ve bakım, optimizasyon (minimizasyon gibi) ve test etme (CI ve gating gibi) kullanım durumlarına odaklanır. Bu kullanım durumlarına, topluluk çıkarlarına dayanarak altyapı kaynakları için şeffaf bir şekilde öncelik verilebilir.

Geri Bildirim Hattı, her bir kullanım durumunu aktif olarak izler ve çalışması için gereken boyutu ve bağımlılıkları kaydeder. Veri geçmişi saklanır ve zaman içinde değişimi görmek için gösterilir. Ve zamanla işleri küçük tutmak için, Geri Bildirim Hattı ayrıca boyut artışlarını otomatik olarak algılar ve potansiyel olarak bu artışları şeffaf bir şekilde izlemek/düzeltmek/doğrulamak için Bugzilla hataları açar.

Minimizasyon üzerine aktif bir odaklanma, bakımcılarımızın aynı veya daha az çabayla boyuta göre optimize edilmiş içerik üretmesi anlamına gelir. Araçlar, hizmetler ve veriler, bağımlılıklarla ilgili doğru kararı vermelerini ve zamanla işleri daha küçük tutmalarını sağlamaktadır.

Eylemler

İlgili kullanım durumlarını tanımlayın ve topluluğun (sadece Minimizasyon Takımı değil) kendi tanımlarını yapmasına izin verin. Kullanım durumunu, belirli bir bağlamda kurulmuş, belirli bir amaca sahip olan — Apache HTTP Sunucusu Konteyneri gibi bir paket olarak düşünürüz. Kullanım durumlarını en azından aşağıdakiler için tanımlayın:

  • httpd

  • nginx

  • MariaDB

  • PostgreSQL

  • Fedora IoT

  • Python 3

Ayrıca, konteynerlere özgü kullanım durumlarına bakmayı düşünün, örneğin:

  • konteyner uygulamaları için GO

  • konteyner uygulamaları için Rust

  • Quarkus

Teknik etkinliklerde, internet forumlarında ve diğer uygun yerlerde insanlarla konuşarak özel kullanım durumları toplayın.

Şunları yapan izleme hizmetlerini genişletin (Geri Bildirim Hattı):

  • Her kullanım durumu için bağımlılıkları ve toplam boyutu görselleştir

  • Zaman içinde boyut değişikliklerini izle

  • Büyük boyut değişikliklerini otomatik olarak algıla

  • Beklenmeyen boyut artışları konusunda bakımcıları bilgilendir

Özellikler dışında ayrıca şunları yapmamız gerekmektedir:

  • katkıda bulunmayı önemli ölçüde basitleştirmek için testler yazmak

  • hizmetin iyi ölçeklenebilmesi için performans iyileştirmeleri yapmak

  • CI ve Rawhide Gating kullanımını keşfet

Neler olup bittiğini görebilmek herhangi bir değişikliğin uygulanmasının ön şartıdır. İlgili tüm fırsatları görmek, en fazla etkiye sahip olanlara odaklanmamıza yardımcı olur ve şeffaf bir takip, çalışmamızın yararlarını kanıtlamamıza ve en etkili faaliyetlere daha fazla odaklanmamıza yardımcı olur.

RPM bağımlılıklarını, özellikleri, yazılım mimarisini ve diğer faktörleri optimize ederek kullanım durumlarının kurulum boyutunu en aza indirin. Özellikle, şunlara bakın:

  • Gereksiz RPM bağımlılıkları (muhtemelen çok fazla olmamasına rağmen)

  • Çeşitli paketler tarafından istenen aynı işlevselliğin çoklu uygulamaları — aynısını kullanmalarını sağlayın

  • Bağlama özel gereksinimler — örneğin geleneksel dağıtımlarda Systemd’yi istemek normaldir, fakat konteynerlerde istemek ciddi boyut artışı anlamına gelir. Bu durumlarda zayıf bağımlılıklardan yararlanın (bu kod değişiklikleri gerektirebilir).

  • Dependencies on large things while only using a fraction of the functionality — such as requiring the whole Perl stack to run a single script — such script can be rewritten to Python which is everywhere mostly because of DNF

Paketleme ve mimarideki daha büyük değişikliklerle ilgili olarak upstream geliştiricileriyle bağlantı kurun. Systemd ve systemd-sysuser paketini bölmek örnek olarak verilebilir.

Daha büyük, daha genel değişiklikleri yansıtan süreç ve politika değişikliklerini uygulayın. Yine iyi bir örnek, systemd’yi konteynerlerde kullanmak veya konteynerlerde kullanıcı oluşturma genel sorunu.

Fedora topluluğu için blog gönderileri, videolar ve konferans konuşmaları şeklinde rehberlik sağlayın. Kurallarımız ve politikalarımız olsa da, haberi yaymak her zaman önemlidir.

Kaynaklar ve Girdiler

Prototip hizmetleri için bulut kaynakları. Geliştirdiğimiz şeyin faydalı olduğunu kanıtlamadan ve istikrar ve üretimin değiştirilmesinin telaşına değmeden, mevcut Fedora altyapısını hiçbir şekilde değiştirmeyeceğiz.

Şu anda mevcut hiçbir Fedora Infra veya Sürüm Mühendisliği kaynağına ihtiyaç yoktur. Ancak, bulut kaynaklarını ayarlamak (veya erişmek) için yardıma ihtiyacımız olabilir.

Bakımcılarımız, FPC ve diğer topluluk üyelerinden aktif destek kesinlikle gereklidir. Bu açıkçası "talep edebileceğimiz" bir şey değil, ama yine de gerekli bir girdi.

Rehber Prensipler

Usefulness over size: There is a balance between the usefulness and size. We take that in mind and will not implement drastic changes that would prevent our users from using Fedora. However, nothing prevents us from producing additional very specific and minimal artifacts.

RPM Kullanımı: Bunu RPM ile yapıyoruz. Minimizasyonu kurulumdan sonra dosyaları silerek gerçekleştirmiyoruz. Bu bariz olabilir, ancak yine de bahsetmeye değer.

Birinci Aşama Başarıları

Ayrıntılı bilgi ve tarihi haftalık güncellemeler için durum sayfasını ziyaret edin. Özet aşağıdadır.

Daha iyi anlama - Evet, şimdi problemi daha iyi anlıyoruz ve sonraki adımlar hakkında daha iyi, daha belirgin bir fikre sahibiz.

Geri Bildirim Hattı — Boyut ve bağımlılıklar için kullanım durumlarını izleyen bir hizmet. Tablolardaki çeşitli görünümleri ve etkileşimli bağımlılık grafiklerini içermektedir.

Systemd ve konteynerler — Özellikle systemd-sysuser kullanarak konteynerlerde kullanıcılar oluşturmayı gerektiren paketler için Systemd vs konteynerler sorununa eğildik. Paketi bölme üzerine upstream ile birlikte çalışıyoruz. Bununla ilgili daha geniş bir politika düşünüldü, ancak henüz önerilmedi.

Politika düşüncesi:

  • A - Eğer systemd sadece hizmetleri başlatmak için gerekliyse, bir paket systemd için sadece "Recommend" kullanmalı. Bu, konteynerlerin paketi systemd olmadan kurmalarına izin verecektir.

  • B - Bir program sadece systemd’nin bir kütüphanesini kullanıyorsa, sadece systemd-libs gerektirmelidir. Örnek: libusb

  • C - Bir paket kullanıcılar/gruplar oluşturmak için systemd-sysusers kullanmak istiyorsa, sadece systemd-sysusers gerektirmelidir. (NOT: Bu alt paket henüz uygulanmadı)

initial-setup — If an image is built without users, there needs to be some way to add a user at startup.  initial-setup does a good job of that, but at the expense of size.  It pulls in anaconda-tui and anaconda-core.  Those two packages then commence to pull in a lot of other, rather large, packages. This is for the IoT images, as well as others. We currently do not have a recommendation, but it is being worked on.

pcre yerine pcre2 kullan - Minimizasyon çabası işleri sadece bir pcre’ye indirmeye çalışıyor ve bu da pcre2.

Polkit and mozjs60 — Let’s explain this one with a terrible analogy! Polkit is this lovely person (.5M) that rings your doorbell and says they will wash the windows of your house.  After you agree, they bring out their elephant (mozjs60 30M) and use it to spray your windows with water. Polkit pulls in mozjs60, which is a rather large package. So, we’re trying to sort this one out, too.