Myslite, ze tvorcom tohto projektu ide naozaj o zlepsenie bezpecnosti alebo sa len chcu zbavit vsetkeho kodu pod GPL aby bolo jednoduchsie uzavriet odvodeny kod pod nejaku neslobodnu licenciu?
Třeba obojí. Nebo je baví přepisovat věci do Rustu.
Mj., teď se otevírá další cesta k bezpečnosti. C/C++ kód jde kompilovat pomocí Fil-C, který programy udělá memory safe pomocí dodatečných kontrol za běhu programu. Výhodou oproti Rustu je, že není potřeba unsafe kód, takže nehorzí, že by programy obsahovaly části, které nejsou memory safe (jako třeba velká část standardní knihovny Rustu).
Pokud chcete opravdu paměťově bezpečný výsledek, tak máte IMO 2 možnosti: formální verifikace kódu nebo runtime kontroly. Přičemž formální verifikace je moc drahá a těžká. Takže většině projektů zbývá druhá možnost, nebo na to rezignovat.
Jinak, že je to hloupost, si třeba nemyslí někteří okolo Zigu - kde se o tom uvažuje - viz introduce a fully memory safe (no escape hatches like in Rust) compilation mode inspired by Fil-C #36237.
Formalni verifikace je draha jednou (pri buildu), runtime kontroly jsou drahe bambilionkrat. Nerikam, ze nemaji misto, jen ze co jde v compile time, ma se delat v compile time. (Nemluve o tom, ze je lepsi udelat veci poradne nez naprasit kolem stareho bordelu.)
Hlavně compile-time kontrola se děje v mé pracovní době u mně na stole. Runtime ne. Takže pro ty runtime kontroly je stejně nezbytné to důkladně pokrýt unittesty. Protože v runtime se to už dá jen eskalovat na crash, což je jen jiný druh průseru. Není to prevence bugu, jen změna jeho projevu.
Fil-C je sanitizer, tečka.
Dělat věci v compile-time je mnohem efektivnější a rozumější než na to prasit runtime a dělat kontroly úplně při každém přístupu do paměti. Fil-C je slepá ulička - je to záplata na neexistující řešení udělat to efektivně v C++, protože komunita a committee se nedokážou dohodnout na tom, jak tam a jestli přidat anotace pro lifetime nebo ne...
Rust ukázal cestu, jak 99% problémů lze vyřešit už v compile-time. Zig uvažuje o zlepšení debug buildů, ne o takto drahému řešení pro produkční buildy - to by zabilo ten jazyk OMG.
Přece každý kdo má rozum to musí pochopit. Žádná firma nebude platit 6x tolik serverů jen proto, aby mohli nasadit produkční kód s Fil-C. Vždyť pro některé i 5% zlepšení výkonu je něco, co se dá spočítat na konečné ceně serverů.
Navíc Fil-C dokáže najít problémy až při běhu, což je pro hodně věcí příliš pozdě. K čemu mi je, že na mojem clusteru crashuje nějaká službam, když by se tomu dalo zabránít tím, že by se kód vůbec nezkompiloval.
Jediné opravdu dobré řešení pro existující C a C++ produkty je mít hodně testů a robustní CI.
> Rust ukázal cestu, jak 99% problémů lze vyřešit už v compile-time. Zig uvažuje o zlepšení debug buildů, ne o takto drahému řešení pro produkční buildy - to by zabilo ten jazyk OMG.
To není pravda, protože celá standardní knihovna je plná unsafe kódu, takže když použijete cokoliv ze standardní knihovny, tak používáte unsafe kód, který může být plný chyb.
Jinak řečeno 99,9 % programů závisí na unsafe kódu. Takže zdaleka nemáte paměťovou bezpečnost.
Pro úplnost: existují snahy verifikovat standardní knihovnu, ale zatím je FIl-C dál.
> Jinak řečeno 99,9 % programů závisí na unsafe kódu.
To je nepřesné. Reálně 100 % programů (vč. Hello world) v jakékoli implementaci jakéhokoli jazyka závisí na nějakém unsafe kódu. Jen je otázka, jak hluboko je to ukryto, jak dobře je to odděleno a kolik toho je
To, že nějaký kód může být plný chyb, neznamená, že plný chyb je. Zkontrolovat na paměťovou bezpečnost standardní knihovnu je mnohem jednodušší, než kontrolovat stále veškerý kód, který standardní knihovnu používá.
Chyby mohou být samozřejmě i v Rustu, takže i paměťově bezpečný kód v Rustu může mít ve skutečnosti chybu. Jenže ono to ve skutečnosti není „program je/není paměťově bezpečný“. Ve skutečnosti jde o to minimalizovat množství chyb při práci s pamětí. A tam prostě Rust oproti C/C++ dost pomáhá, a za poměrně nízkých nákladů.
> Zkontrolovat na paměťovou bezpečnost standardní knihovnu je mnohem jednodušší, než kontrolovat stále veškerý kód, který standardní knihovnu používá.
Je to jednodušší, ale pořád těžké. Tak těžké, že i zkušení vývojáři standardní knihovny dělají chyby v jednoduchých funkcích a na review se na to nepřijde. Při troše štěstí to najde Miri, který je ale ještě pomalejší než Fil-C.
Druhá věc je, že Rust nemá pořád specifikována pravidla pro aliasing. Takže ani nejde přesně říci, kde je to ještě dobře a kde špatně (jsou situace, kde i třeba lidé kolem Miri řeknou probably bug, ale jistí si nejsou).
> Při troše štěstí to najde Miri, který je ale ještě pomalejší než Fil-C.
Jako, obvykle jsou tvoje argumenty docela absurdní, ale tady ses překonal :) Fakt porovnáváš pomalou runtime kontrolu s pomalým miri checkem CI?
Mluvím o tom že srovnáváš hrušky s jabkama. „Miri je ještě pomalejší než Fil-C“ je úplně uhozené tvrzení. Jedno je jednorázový test, to druhé pomalá runtime. Pomalost Miri řeším jen při čekání na výsledek CI pipeline při vývoji, pomalost Fil-C pocítí každý uživatel.
> Pomalost Miri řeším jen při čekání na výsledek CI pipeline při vývoji, pomalost Fil-C pocítí každý uživatel.
To ano. Ale znamená to pak také, že programy v Rustu, které dám uživatelům, nejsou chráněny proti nedefinovanému chování v unsafe kódu. Můžu jen doufat, že jsem ta chování odhalil testem, který běžel na CI pod Miri.
Ale znamená to pak také, že programy v Rustu, které dám uživatelům, nejsou chráněny proti nedefinovanému chování v unsafe kódu.
Úplně stejně, jako všechny ostatní programy, které reálně uživatelé používají. Takže tohle není žádná nevýhoda Rustu.
S Fil-C ano. A v Zigu, když přeložíte s ReleaseSafe, tak jste na tom lépe než obyčejný unsafe Rust nebo C.
S Fil-C ano. A v Zigu, když přeložíte s ReleaseSafe, tak jste na tom lépe než obyčejný unsafe Rust nebo C.
Kolik je těch programů s Fil-C nebo v Zigu přeložených s ReleaseSafe, které reálně uživatelé používají?
Současné rozšíření není moc argument, když se diskutuje možná budoucí změna, vylepšení. Stejně tak se dá říct, že uživatelé beztak používají většinu softwaru psaného v C, C++, Javě, tak proč řešit nějaký Rust, Go, D atd.
Vzhledem k tomu, že se často používají pomalé skriptovací / interpretované jazyky, tak bych ty běhové kontroly zakompilované do programu úplně nezavrhoval. Rychlost není vše a pro spoustu uživatelů to vůbec není hlavní kritérium resp. může to být zpomalení, které je pod jejich rozlišovací schopnost, takže pak převládnou ty přínosy.
Jinak já třeba považuji za zvěrstvo, že se v C pořád píší věci jako systemd. Tam by se ten vyšší programovací jazyk hodil mnohem víc, než cpát Rust do Jádra. Ale když už ten software v C je, tak dodatečné kontroly něčím, jako je Fil-C, můžou být dost užitečné. A zrovna ten systemd jen orchestruje služby, tam ta rychlost fakt není kritická a klidně by to mohlo být psané v Shellu, Lispu, Lue, PHP... ale když tam bude bezpečnostní chyba, tak to postihne prakticky všechny. Podobná situace je v tom Jádře - jen pro část toho kódu je kritická rychlost - ten zbytek by klidně mohl být v nějakém nízkoúrovňovém skriptovacím jazyce, protože se spustí jen jednou, nakonfiguruje dané zařízení a skončí.
> Přece každý kdo má rozum to musí pochopit. Žádná firma nebude platit 6x tolik serverů jen proto, aby mohli nasadit produkční kód s Fil-C. Vždyť pro některé i 5% zlepšení výkonu je něco, co se dá spočítat na konečné ceně serverů.
Vzhledem k tomu, kolik firem používá interpretované jazyky, které jsou i 30x pomalejší, tak bych řekl, že se to tolik neřeší.
Ale řeší. Třeba v kontextu googlu nebo facebooku zrychlení o 1% zaplatilo daného vývojáře jen skrz úspory energie. Byla to přednáška hodně let zpátky, takže už nevím co to bylo za megafirmu.
To použití pomalých jazyků stojí na tom, že pro kritické části můžou zavolat rychlé knihovny. Obvykle to vyžaduje volat nějaké C api, dost často nějaké 3rd party knihovny. Bez unsafe kódu to jde dost blbě.
Pokud je nezajímá výkon, nebudou řešit Fil-C, ale napíšou to v Javascriptu nebo Pythonu. Pokud budou řešit výkon, ale ne tolik, napíšou to v Go nebo C#.
Ve velkých firmách jako Google, Amazon nebo Microsoft se i 5 % výkonu na serveru promění v obří úspory. Smysl má řešit i 1 %
Kam do toho zapadá Fil-C?
IIUC Fil-C má určitou výhodu u již existujícího kódu, tam je to jednodušší než ho přepisovat do JS/Pythonu. Ale zase Fil-C je one man show. Navíc možná bude dost často důvod, proč ten kód byl původně psán v C.
A to může být i ten důvod, proč se do toho nikomu nechtělo výrazněji investovat – použití bude dost omezené.
Vlastně bychom to mohli rozčlenit do čtyř skupin:
Nový kód, záleží na výkonu => Rust, dostaneme I pohodlnější jazyk. Informace pro borrow checker je IMHO stejně věc, kterou netriviální Cčkový kód musel nějak udržovat v komentářích.
Nový kód, nezáleží na výkonu => JS, Python a další.
Starý kód, záleží na výkonu => Fil-C bude pomalé => jiné řešení (statické analýzy, přepis do Rustu, …). Možná sandboxing aplikace jako celku, byť to brání škodám jen částečně.
Starý kód, nezáleží na výkonu => většinou nebyl napsán v C. Ale ano, tady by se Fil-C mohlo hodit. Ještě víc by se hodilo, kdyby to nebyla one-man-show, ale s ohledem na omezené využití do toho nejspíš nebudou velké investice.
> Starý kód, nezáleží na výkonu => většinou nebyl napsán v C. Ale ano, tady by se Fil-C mohlo hodit.
To je taky otázka. Studie ukazují, že starý C kód (Pokud je udržovaný) už tolik na podobné chyby netrpí, po nějaké době se to nejhorší vychytá. A nová funkcionalita už může být klidně Rust - takhle to tuším dělá s úspěchem Google. My v práci zase takhle kvůli výkonu "Rustizujeme" .net kód.
ad „Nový kód, nezáleží na výkonu => JS, Python a další.“
Tady nějak implicitně předpokládáš, že tyhle jazyky jsou pro vývojáře lepší. Pro někoho na psaní asi ano, ale pokud máš číst kód po někom jiném, tak dynamicky typované jazyky jsou obecně horší. Kolikrát zjistíš, co to dělá, až v debuggeru, když to spustíš, ne čtením zdrojáku. Osobně budu radši číst slušně napsané C++ nebo i C než průměrný Python nebo JavaScript. Ideál na čtení je asi Java, protože tam nejsou nízkoúrovňové záludnosti C/C++ a zároveň je to staticky typované.
(samozřejmě obfuskovat se dá kód v libovolném jazyce, i v té Javě, když to někdo přežene s AOP a automagickými frameworky, ale za jinak stejných okolností se líp čte staticky typovaný kód, protože tam ta informace je už ve zdrojáku)
7. 8. 2026, 11:12 editováno autorem komentáře
Klidně Java / Scala / Kotlin / Typescript/ Python + Mypy / Elm / Haskell / Prolog . Pointa se nemění. Ty dva jazyky jsem vzal z příspěvku, na který jsem reagoval.
Ano, taky mám rád statické typy.
> Zig uvažuje o zlepšení debug buildů, ne o takto drahému řešení pro produkční buildy - to by zabilo ten jazyk OMG.
To není pravda, hned na začátku je věta "mainly it is expected to combine this ABI with Optimize.safe or Optimize.debug". Takže i v produkci, protože safe se používá i v produkci.
Děláte jakoby se Fil-C už nedal nikdy zrychlit.
Fil-C se nedá nikdy zrychlit - tak jako ASAN/MSAN/UBSAN se nedá nikdy zrychlit. Můžeš na tom strávit roky a posuneš to o 10% třeba, ale neuděláš to 6x rychlejší. Navíc 2x-3x extra paměťové nároky v době, kdy je cena pamětí na maximu... Prostě toto nikdo nezaplatí...
Unsafe není problém - unsafe je jediná možnost jak udělat třeba syscall nebo podporovat C ABI. Rozdíl je unsafe everywhere vs isolated unsafe.
7. 8. 2026, 09:26 editováno autorem komentáře
Zrychlit by to určitě šlo. Třeba přidat analýzu, která dovolí ty kontroly za běhu odstranit. Takové analýze by se mohla hodit i informace o životnosti datových struktur. Oh wait…
No a jsme u toho... co je perspektivnější? Udělat C++ bezpečnější pomocí lifetime anotací a nebo se pokoušet o trochu zrychlit sanitizér?
Za mě to první - compile-time je oblast, která potřebuje zlepšovat, a ne sanitizéry - tam jde o kvalitu, pokrytí, atd... špatný výkon není problém.
> No a jsme u toho... co je perspektivnější? Udělat C++ bezpečnější pomocí lifetime anotací a nebo se pokoušet o trochu zrychlit sanitizér?
Podle mě nemá cenu vydávat se stejnou cestou jako Rust - co by to mělo za přínos? Když někdo chce tohle, tak proč by nepoužít Rust rovnou? Smysl by to mělo, kdybyste ten C++ kód nemusel měnit, což asi obecně nepůjde, protože inference lifetimů nepůjde bez anotací s rozumnou časovou složitostí.
> Podle mě nemá cenu vydávat se stejnou cestou jako Rust - co by to mělo za přínos? Když někdo chce tohle, tak proč by nepoužít Rust rovnou?
Co třeba inkrementální nasazení? Ty anotace se dají přidávat soubor po souboru. Přepis do Rustu je hrubší - spíš po jednotlivých modulech.
BTW ono se to už zrychlilo za poslední rok.
Jinak pro upřesnění, ta rychlost závisí na tom, jak program pracuje s pamětí. U některých programů je zpomalení jen 1,1 krát a u jiných i 9 krát.
C ABI si můžete nadefinovat - různé platformy mají různé.
ABI je ABI - tam si nic vlastního definovat nemůžu.
Nedeterministické zpomalení ale není žádný argument pro. Program většinou potřebuje přistupovat k paměti - máme minimálně 2x read a 1x write za cyklus, a Fil-C toto naprosto degraduje k nepoužitelnosti.
> ABI je ABI - tam si nic vlastního definovat nemůžu.
ABI je sada pravidel, takže můžete. A tak to dělá Fil-C.
> není potřeba unsafe kód,
Vždycky je potřeba unsafe kód. Tady si na něj akorát udělal Fil-C monopol. Má to své výhody a nevýhody. Podobně měl jazyk Go ze začátku monopol na generika. Udržitelný byl jenom v rámci jedné korporátní hierarchie. Venku padl.
Fil-C dopadne při masivnějším používání stejně. Přijde o monopol na unsafe kód (protože v praxi je to občas třeba), nebo nebude pro spoustu případů použitelný.
Druhá věc je že memory safety je jen jedna z mnoha skupin bugů. Stačí dosáhnout částečné bezpečnosti aby začaly být dominantní úplně jiné problémy. Fanatická kontrola memory safety například dokáže ze sebemenšího bugu který by sám o sobě ani nemusel být zneužitelný udělat prostor pro spolehlivý a daleko závažnější DOS útok.
> Přijde o monopol na unsafe kód (protože v praxi je to občas třeba), nebo nebude pro spoustu případů použitelný.
Jediné, co to neřeší, je jádro OS. Jinak tím překompilujete všechny programy v C/C++, takže to funguje napříč celým systémem, programy a knihovnami. Většina C kódu normálně funguje, takže vám to nebere vyjadřovací sílu jako např. Rust, kde některé datové struktury v safe kódu v podstatě nenapíšete pomocí obyčejných referencí a musíte použít Rc nebo Arc nebo sáhnout k unsafe jako standardní knihovna.
memory-safe Řeší to jednu třídu problémů. Chytne to "use after free", ale chytne to třeba v kontextu c++ "use after destroy/move"?
Chytne to, pokud byl objekt uvolněn. Pokud ne, tak to nechytne, protože to není memory safety problém.
> Jediné, co to neřeší, je jádro OS.
Já bych to napsal trochu jinak. To jádro OS je jediné, co to _řeší_ a díky tomu umožňuje použít. Jak potřebujete zavolat něco jiného, tak máte smůlu. Nejde o C kód. Jde o C API, které je defacto standard pro různá FFI volání napříč různými jazyky.
To je ta síla o kterou přijdete.
C API voláte. Problém je s ABI. Má to vlastní nekompatibilní ABI. Ale díky tomu, že s tím ABI můžete přeložit všechny programy a knihovny, tak to není takový problém.
Navíc ta bezpečnost nezmizí jako u Rustu, když používáte dynamicky linkované knihovny. To bohužel Rust také neumí bezpečně.
> Ale díky tomu, že s tím ABI můžete přeložit všechny programy a knihovny, tak to není takový problém.
Tohle právě je problém. Máte nějakou třetí partu jen jako binárky? Smůla. Nebo zdrojáky máte, ale je to třeba Fortran. Někdy tu unsafe vrstvu můžete poslat jako PR do Fil-C, někdy ne.
Ta unsafe vrstva tam prostě bude. Fil-C ji akorát vyhodil do nehlídaného C. Tvářit se, že tam ten unsafe kód není, není rozhodně cesta k tomu aby v něm bylo minimum bugů. Mrknětě na Vulkan PR na Fil-C githubu. To je mrtě unsafe kódu.
Představte si to jako portování programů na jiný OS, kterým má ale shodou okolností stejná systémová volání jako Linux.
Jediné, co tam bude unsafe bude kernel a runtime Fil-C. Pro Fortran to samozřejmě znamená upravit kompilátor, nicméně pokud pro jazyk existuje LLVM backend, tak by to nemuselo být těžké. Stejně tak pro všechen uzavřený kód to znamená, že se musí přeložit pomocí Fil-C, uzavřený pak může zůstat a bude to bezpečné včetně používání dynamicky linkovaných knihoven.
Teoreticky i Rust by šel přeloži pomocí Fil-C, čímž by se stal bezpečný.
Ona je také otázka, čemu říkáte bezpečný. Rust garantuje, že v safe kódu nebude chyba v přístupu k paměti. Fil-C garantuje akorát to, že za běhu nedovolí chybu v přístupu k paměti provést – opravit ji ale nemůže, takže jediné, co zbývá, je zabít celý program. Za mne je to obrovský rozdíl. A snad ještě víc než ta náročnost za běhu to ukazuje, že Fil-C není v drtivé většině případů řešení. Fil-C je obezlička pro případ, kdy by chybné použití paměti znamenalo obrovský průšvih, a z nějakého důvodu nejde použít jiný jazyk. I pro aplikaci přeloženou s Fil-C ale platí, že v ní chyby v přístupu k paměti mohou být a pokud jsou, je daná část programu nepoužitelná.
Rozdíl to je, pokud se v Rustu dokážete omezit na safe kód. Pokud máte hodně unsafe kódu (např. protože používáte dynamicky linkované knihovny, píšete vlastní datové struktury), tak je naopak lepší použít Fil-C nebo alespoň Zig.
Pokud například potřebujete forknout datové struktury ze standardní knihovny (např. proto, že místo Ord chcete používat vlastní porovnávací closure, která má nějaký stav), tak máte safety dost možná horší než jiné systémové jazyky, protože alising v Rustu je těžký a nástroje na chytání chyb v unsafe kódu horší.
To ale neřešíte paměťovou bezpečnost vlastního kódu, ale kódu knihoven. Ta (když jde o C knihovnu) závisí na tom, zda tu knihovnu přeložíte s Fil-C – což je nezávislé na tom, odkud ji voláte.
> tak by to nemuselo být těžké
Těžké možná ne, ale rozhodně extrémně pracné. V porovnání s normálním asanem je to hodně peněz za málo dodatečné muziky.
> čímž by se stal bezpečný.
Jen pro velmi specifickou interpretaci slova "bezpečný". Fil-C se soustředí na paměťovou bezpečnost, ostatní třídy chyb nechává osudu. Paměťová bezpečnost stačí vyřešit jen částečně a normální význam bezpečnosti začne drhnout na úplně jiných problémech.
Víceméně už klasika s výrobci embedded zařízení, dodržování GPL. Řešilo se to asi od roku 2007
https://en.wikipedia.org/wiki/BusyBox#GPL_lawsuits
Což pak vedlo ke dvěma věcem. Ti kteří používají Busybox dál, tak distribuují jeho zdrojáky a buildscript ve svém tarballu, repu společně s jádrem a ostatními GPL nástroji a knihovnami, nebo přešli na Toybox. Ten je napsaný jedním z původních autorů Busyboxu o pár let později, má BSD licenci a používá se mj. např. v Androidu.
Za prvé, Busybox má od coreutils významné odlišnosti. Za druhé, pořád nevidím, že by někdo chtěl udělat v coreutils změny, uzavřít je – a co by s tím dál dělal? To pak jako bude třeba Ubuntu používat vlastní coreutils které budou mít nekompatibilní rozšíření? Kdo by ta nekompatibilní rozšíření používal? Ano, děje se to, že různé verze nástrojů mají různá rozšíření – ale to je spíš proto, že to ještě někde není implementované. Není to proto, že by někdo to rozšíření považoval za svou konkurenční výhodu a uzavíral kvůli tomu kód. Že by třeba Ubuntu propagovalo „kupte si naši placenou distribuci, protože v ní má cp přepínač XY, který dělá…“? To mi nepřipadá pravděpodobné.
> Myslite, ze tvorcom tohto projektu ide naozaj o zlepsenie bezpecnosti alebo sa len chcu zbavit vsetkeho kodu pod GPL aby bolo jednoduchsie uzavriet odvodeny kod pod nejaku neslobodnu licenciu?
S dovolením se odkážu sám na sebe, protože z každé zprávičky ohledně nějakého inkrementálního vylepšení uutils/coreutils se stane debatiště o Rustu a licencování.
https://www.root.cz/zpravicky/microsoft-ma-coreutils-pro-windows-jsou-v-rustu/nazory/#o1306836
https://www.root.cz/zpravicky/ubuntu-26-10-by-melo-plne-prejit-na-rust-coreutils-vyvojari-ladi-chyby/nazory/#o1296783
Slobodny softver predsa nie je len o mojej slobode ale hlavne o slobode ostatnych. Cize licencia, ktora dovoluje znizit slobodu odvodeneho diela je menej slobodna ako ta, ktora vyzaduje zachovanie rovnakej slobody aj nadalej. Nie?
To je kruhová definice. Abyste mohl určit, co je „snížení svobody“, musíte nejdřív zjistit, co je víc svobodné a co méně. Někdo může považovat možnost změny licence za svobodu.
Stejně tak můžeš říct, že nesvoboda je to, že nesmíš zabíjet jiné lidi. Svým způsobem je to pravda. Ale přesto se naprostá většina lidí tohoto práva vzdá výměnou za to, že ostatní nebudou smět zabíjet je.
Však to také nesvoboda je. Akorát se drtivá většina lidí shodne na tom, že svoboda nebýt zabit je nesrovnatelně důležitější, než svoboda zabíjet. Na tom, že GPL je svobodnější než třeba BSD, MIT nebo Apache, ale taková shoda rozhodně není.
Když děláš nesvobodný software, tak ti nehrozí, že by někdo tvoje zdrojáky vzal a uzavřel, protože už uzavřené jsou a máš je jen ty. Tzn. nehrozí, že by někdo „zabil“ tebe a naopak se ti hodí, když můžeš „zabíjet“ druhé.
Volba licence je věc každého autora a pokud vydává pod permisivní licencí, tak si nemůžu stěžovat. Stejně tak pokud to vydá pod proprietární nebo nějakou obskurní nebo to nevydá vůbec, tak si taky nemůžu nárokovat, aby to vydal pod licencí, která se líbí mně. Jen mi přijde, že hodně autorů podlehlo tlakům vydávat pod permisivní licencí, i když jsou za tím hlavně zájmy těch, kdo chtějí jen brát a využít zadarmo cizí práci ve svém proprietárním softwaru.
> Slobodny softver predsa nie je len o mojej slobode ale hlavne o slobode ostatnych. Cize licencia, ktora dovoluje znizit slobodu odvodeneho diela je menej slobodna ako ta, ktora vyzaduje zachovanie rovnakej slobody aj nadalej. Nie?
Obecně vzato jak copyleft (GPL, Affero), tak permissive licence (BSD, MIT, Apache..) jsou pořád brány jako svobodné, protože si drží ty čtyři základní charakteristiky, podle kterých se to posuzuje.. jinými slovy, tohle je to hlavní.
https://en.wikipedia.org/wiki/The_Free_Software_Definition#The_Four_Essential_Freedoms
A ano, jestli poskytuje víc svobody ta copyleft nebo permissive záleží na úhlu pohledu (původní projekt, uživatel, další vývojář). Celá tahle debata se vede asi 40 roků, nejspíš od té doby, co to R. Stallman veřejně formuloval. A opravdu se nedá říct, že by se na tom všichni shodli.
Proto taky většina reálných linuxových distribucí (včetně všech možných Libre... variant bez proprietárních blobů a programů) v sobě vždycky obsahovala komponenty pod různými svobodnými licencemi.
Např. kernel, glibc, gcc, iproute, gnu coreutils, GNOME, bash... - copyleft
a zas třeba openssl, Xorg, openssh, ntpd, sudo, nginx, Apache httpd, Python, zsh, ksh, tmux, llvm/clang... - permissive
Stejně jako máte celou rodinu operačních systémů BSD, které nikdy nebyly GPL.
Máte pak samozřejmě mnoho faktorů, které to můžou ovlivnit.. ať už to, že projekt nevzniká na zelené louce a přejímá předchozí nebo přímo používá jiné s již existující licencí - což je přesně to, co jsem zmiňoval už několikrát (uutils používají hromadu existujících crates a naopak spousta jiných projektů může použít crates z něj, bez ohledu na to jestli mají permissive nebo copyleft licence).
A pokud už se bavíme takhle obecně, tak je asi fajn zmínit i tu ekonomickou stránku věci a udržitelnost projektů. Rozhodně to není v praxi jen černá/bílá. To že software s permissive licencí případně použije do svého uzavřeného projektu nějaká komerční firma nemusí nutně znamenat pouze negativa.
Ano může to pojmout tak, že veškeré úpravy si dál řeší pouze sama, dělá si své proprietární úpravy, do původního projektu dál žádným způsobem nepřispívá.. to je samozřejmě riziko. Nebo také může produkt využívat a přinést do projektu další prostředky na lidi okolo, vývojáře kteří byť třeba se zpožděním upstreamují jejich změny, sdílí infrastrukturu, bezpečnostní testy.. atd. Což by se třeba nestalo, pokud by pro ně projekt na začátku neměl přijatelnou licenci a zvolili by si něco jiného.
Takhle má třeba projekt mnohem rychlejší rozšíření, rozvoj a těch změn můžou využít všichni včetně běžných uživatelů.
Takže je tam spousty nuancí a licence samotná nemusí nutně znamenat zdravý projekt. Mužete mít ideologicky "čistý" GPL projekt s pěti forky a vývojáři, co se mezi sebou neshodnou a nepřijímají si pull requesty, neportují změny (ať už z jakéhokoliv důvodu).. stejně jako rozumně udržovaný (governance) Apache/MIT projekt, který je v pohodě a rozvíjí se, přestože ho používají i komerční firmy.
Jen jsem chtěl říct (bez ohledu na uutils), že to v reálu může bývá mnohem složitější.. a to jestli je to něco jen GPL, duální licencování, permissive Apache.. je prostě jen jeden aspekt.
Ještě k tomu uutils/coreutils samotnému.. není to tak, že bych z projektu samotného byl na větvi a řekl si něco v duchu "Konečně! Na tohle všichni čekali.", ne. Testoval jsem si to.. určitě to má svá pozitiva (multiplatformní, využití crates na abstrakci těch systémových věcí). Nicméně to není tak, že bych to teď viděl jako komponentu, která by měla všude nahrazovat GNU Coreutils.
Ale to není to hlavní, proč sem píšu.
Ten důvod je veskrze ten, že mi obecně vadí nejrůznější konspirace, polopravdy, co někteří lidé, mnohokrát bez dalšího rozmyslu a kontextu, přejímají a lajkují.
A míra nesmyslů, na které jsem všude možně narazil od doby, kdy se jedna distribuce rozhodla nahradit ve výchozím stavu pár komponent (z asi 6000 balíčků, co jsou v základním repu a kde je běžný mix všech svobodných licencí), je pro mě veskrze nevídaná.
Např. nějaké postupné vymýcení GPL.. jak by to chtěli asi udělat, když jádro, systemd, gcc a hromada dalších komponent v běžném systému jsou a zůstanou pod copyleft licencemi.
Stejně jako už dávno před uutils šlo v minimálních embedded systémech nechat jen jádro a loader s GPL a pak dál použít např. musl, toybox v userspace. Přes to všechno stejně ty zdrojáky jádra a loaderu musí na vyžádání poskytovat, aby vyhověli GPL.