Fedoran minimointitavoite

Toisen vaiheen ehdotus

Ohjaaja: Adam Samalik (asamalik)

Ongelma

Vaikka Fedora sopii hyvin perinteisiin fyysisiin/virtuaalisiin työasemiin ja palvelimiin, se jätetään usein huomiotta perinteisten asennusten ulkopuolisissa käyttötapauksissa.

Jotkut nykyaikaiset käyttöönottotyypit — kuten IoT ja kontit — ovat melko herkkiä koolle. IoT:n osalta, joka on yleensä hidas datayhteys (päivityksiä / hallintaa varten), ja pilvipalvelujen ja konttien osalta se on massiivinen.

Nimenomainen esimerkki on Systemd — vaikka se onkin erittäin hyödyllinen (kaikki rakastavat Systemd: tä) ja on aina läsnä fyysisissä järjestelmissä, sitä tarvitaan harvoin säiliöissä. Joten pakettien ei ollut ongelma vaatia Systemd:tä vain systemd-sysusers:lle käyttäjien luomiseen. Säiliöissä tämä tarkoittaa kuitenkin merkittävää koon kasvua.

Tämän lisäksi periaatteessa kaikentyyppiset käyttöönotot hyötyvät pienemmästä koosta, koska asennuksen jalanjäljen ja pinta- ja asiaankuuluvien CVE:n välillä on suora yhteys.

Näkemys

Tuhannet yksityishenkilöt ja yritykset osallistuvat Fedora-yhteisöön yhteistyössä uusien ongelmien tutkimiseksi ja nopeasti kehittyvän modernin käyttöjärjestelmän ja rikkaan ekosysteemin rakentamiseksi, jotta he voivat kokeilla infrastruktuurinsa modernisointia.

Tehtävä

Autamme avoimen lähdekoodin kehittäjiä, järjestelmänvalvojia ja Linux-jakelun ylläpitäjiä keskittymään heidän kannaltaan tärkeisiin asioihin.

Aikaansaannit

Fedora on suosittu alusta, koska sen ekosysteemi on sekä huippuluokan että hyvin optimoitu nykyaikaiseen käyttöönottoon, kuten IoT:iin ja kontteihin. Tämä saa monet ihmiset käyttämään Fedoraa pikemminkin kuin rakentamaan ja kokoamaan omia esineitään suoraan alkupään projekteista. Ja tämä lievittää paineita avoimen lähdekoodin kehittäjille, jotka aiheutuvat käyttäjiltä, jotka muuten pyytävät heidän erityisten turvallisuus- ja muiden ongelmiensa korjaamista nopeasti.

Siten:

  • Avoimen lähdekoodin kehittäjät voivat keskittyä ominaisuuksien kehittämiseen

  • Järjestelmänvalvojat voivat helposti kuluttaa valmiita bittejä, jotka saavat myös säännöllisiä päivityksiä

  • Fedoran avustajat (toimittajat ja yksityishenkilöt) voivat tehdä yhteistyötä Fedora-yhteisössä etsimällä ja kehittämällä avoimen lähdekoodin ratkaisuja tulevaisuuden ongelmiin

Aikaansaannit

Erityiset käyttötapaukset on määritelty Fedorassa. Sitten yhteisö keskittyy niihin käyttötapauksiin, joihin sisältyy kehitys ja ylläpito, optimointi (kuten minimointi) ja testaus (kuten CI ja portointi). Nämä käyttötapaukset voidaan priorisoida avoimesti infrastruktuuriresursseille yhteisön etujen perusteella.

Feedback Pipeline seuraa aktiivisesti kutakin käyttötapausta ja tallentaa sen suorittamiseen tarvittavan koon ja riippuvuudet. Tietohistoria säilytetään ja näytetään muutosten näkymiseksi ajan myötä. Ja jotta asiat pysyisivät pieninä ajan myötä, Feedback Pipeline havaitsee myös koon kasvun ja avaa mahdollisesti automaattisesti Bugzilla-virheet seuraamaan/korjaamaan/perustelemaan tällaisia lisäyksiä avoimesti.

Aktiivinen keskittyminen minimointiin tarkoittaa, että ylläpitäjämme tuottavat koon mukaan optimoitua sisältöä samalla tai pienemmällä vaivalla. Työkalut, palvelut ja tiedot auttavat heitä tekemään oikean päätöksen riippuvuuksista helposti ja pitämään asiat ajan myötä pienempänä.

Toimet

Tunnista asiaankuuluvat käyttötapaukset ja anna yhteisön (ei vain minimointitiimin) määritellä omat. Mielestämme käyttötapaus on pakettien joukko, jotka on asennettu tiettyyn kontekstiin ja joilla on tietty tarkoitus – kuten Apache HTTP Server Container. Määritä käyttötapaukset ainakin:

  • httpd

  • nginx

  • MariaDB

  • PostgreSQL

  • Fedora IoT

  • Python 3

Harkitse myös tarkastella konttikohtaisia käyttötapauksia, kuten:

  • GO konttiohjelmille

  • Rust konttiohjelmille

  • Quarkus

Kerää erityisiä käyttötapauksia puhumalla ihmisten kanssa teknisissä tapahtumissa, internet-foorumeilla ja muissa kannattavissa paikoissa.

Laajenna valvontapalveluja (palauteputki), jotka:

  • Visualisoi riippuvuudet ja kokonaiskoko kullekin käyttötapaukselle

  • Seuraa koon muutoksia ajan myötä

  • Tunnista automaattisesti suuret koon muutokset

  • Ilmoittaa ylläpitäjille odottamattomista koon kasvuista

Ominaisuuksien lisäksi tarvitsemme myös:

  • kirjoittaa testejä helpottamaan merkittävästi osallistumista

  • tehdä suorituskyvyn optimointia, jotta palvelu skaalautuu hyvin

  • tutkia CI:n ja Rawhide Gatingin käyttöä

Kaikkien muutosten toteuttamisen edellytys on kyky nähdä, mitä tapahtuu. Kaikkien asiaankuuluvien mahdollisuuksien näkeminen auttaa meitä keskittymään niihin, joilla on eniten vaikutusta, ja läpinäkyvä seuranta auttaa todistamaan työmme hyödyllisyyden ja keskittymään edelleen vaikuttavimpiin toimintoihin.

Minimoi käyttötapausten asennuskoko optimoimalla RPM-riippuvuudet, ominaisuudet, ohjelmistoarkkitehtuuri ja muut tekijät. Etsi erityisesti:

  • Tarpeettomia RPM-riippuvuuksia (vaikka niitä ei todennäköisesti tule olemaan montaa)

  • Eri pakettien vaatimat useat saman toiminnon toteutukset – yritä saada ne käyttämään samaa

  • kontekstikohtaiset vaatimukset – kuten Systemd:n vaatiminen perinteisissä käyttökohteissa ollen ok verrattuna sen vaatimiseen konteissa merkitsee huomattavaa koon kasvua. Hyödynnä heikkoja riippuvuuksia näissä tapauksissa (jotka saattavat edellyttää koodimuutoksia).

  • Riippuvuus suurista asioista samalla kun käytetään vain murto-osaa toiminnallisuudesta – kuten koko Perl-pinon vaatiminen yhden skriptin suorittamiseksi – sellainen komentosarja voidaan kirjoittaa uudelleen Pythonilla, mikä löytyy kaikkialta pääasiassa DNF:n takia

Ota yhteyttä ylävirran kehittäjiin koskien suurempia muutoksia pakkauksessa ja arkkitehtuurissa. Esimerkki on Systemd ja paketin systemd-sysuser jakaminen osiin.

Ota käyttöön prosessi- ja käytäntömuutoksia, jotka heijastavat suurempia, yleisempiä muutoksia. Jälleen hyvä esimerkki on Systemd:n käyttö konteissa tai yleinen ongelma käyttäjien luomisesta konteissa.

Tarjoa ohjeita Fedora-yhteisölle blogitekstien, videoiden ja konferenssikeskustelujen muodossa. Vaikka meillä saattaa olla ohjeita ja käytäntöjä, sanan levittäminen on aina tärkeää.

Resurssit ja palautteet

Pilviresurssit prototyyppipalveluihin. Emme aio muuttaa olemassa olevaa Fedora-infrastruktuuria millään tavalla, ennen kuin kaikki kehittämämme osoittautuu hyödylliseksi ja vakauden ja tuotannon muuttamisen vaivan arvoiseksi.

Tällä hetkellä ei ole tarvetta Fedora Infra- tai Release Engineering -resursseille. Saatamme kuitenkin tarvita apua pilviresurssien määrittämisessä (tai niihin sisään pääsemisessä).

Aktiivista tukea ylläpitäjiltämme, FPC:ltä ja muilta yhteisön jäseniltä tarvitaan ehdottomasti. Tätä emme tietenkään voi "pyytää", mutta se on silti välttämätön apu.

Ohjaavat periaatteet

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:n käyttäminen: Teemme tämän RPM:illä. Emme saavuta minimointia poistamalla tiedostoja asennuksen jälkeen. Tämä saattaa olla ilmeistä, mutta silti mainitsemisen arvoista.

Ensimmäisen vaiheen saavutukset

Lisätietoja ja historiallisia viikoittaisia päivityksiä on osoitteessa tilasivu. Yhteenveto alla.

Better understanding — Yes, we now have much better understanding of the problem and a better, more specific idea about the next steps.

Feedback Pipeline — A service that monitors use cases for size and dependencies. Includes various views in tables and interactive dependency graphs.

Systemd and containers — We dag into the issue of Systemd vs. containers, especially for packages requiring it just to create users in containers using systemd-sysuser. Working with upstream on splitting the package out. Thought about, but not yet proposed, a wider policy around this.

Policy thinking:

  • A - If systemd is only needed to start services, a package should only "Recommend" systemd.  This will allow containers to install the package without systemd.

  • B - If a program is just using a library of systemd, only require systemd-libs.  Example: libusb

  • C - If a package wants to use systemd-sysusers to create users/groups, only require systemd-sysusers.  (NOTE:  This subpackage isn’t implemented yet)

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.

Use pcre2 instead of pcre — The minimization effort is trying to trim things down to just one pcre, and that is 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.