Bylo oznámeno vydání Fedora Linuxu 43. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách Fedora Magazinu: Fedora Workstation, Fedora KDE Plasma Desktop, Fedora Silverblue a Fedora Atomic Desktops.
Elon Musk oznámil (𝕏) spuštění internetové encyklopedie Grokipedia (Wikipedia). Zatím ve verzi 0.1. Verze 1.0 prý bude 10x lepší, ale i ve verzi 0.1 je podle Elona Muska již lepší než Wikipedia.
PSF (Python Software Foundation) po mnoha měsících práce získala grant ve výši 1,5 milionu dolarů od americké vládní NSF (National Science Foundation) v rámci programu "Bezpečnost, ochrana a soukromí open source ekosystémů" na zvýšení bezpečnosti Pythonu a PyPI. PSF ale nesouhlasí s předloženou podmínkou grantu, že během trvání finanční podpory nebude žádným způsobem podporovat diverzitu, rovnost a inkluzi (DEI). PSF má diverzitu přímo ve svém poslání (Mission) a proto grant odmítla.
Balík nástrojů Rust Coreutils / uutils coreutils, tj. nástrojů z GNU Coreutils napsaných v programovacím jazyce Rust, byl vydán ve verzi 0.3.0. Z 634 testů kompatibility Rust Coreutils s GNU Coreutils bylo úspěšných 532, tj. 83,91 %. V Ubuntu 25.10 se již používá Rust Coreutils místo GNU Coreutils, což může přinášet problémy, viz například nefunkční automatická aktualizace.
Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.
Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.
Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.
Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.
Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.
Systémové volání splice() má dlouhou
historii. splice() byl poprvé navržen Larrym McVoyem v roce
1998 jako způsob vylepšení I/O operací na serverech. Přestože se často v
následujících letech zmiňovalo o splice(), žádná
implementace nikdy nebyla vytvořena pro hlavní řadu linuxového jádra. Nicméně,
situace se změnila těsně před uzavřením začleňovacího okna pro 2.6.17, kdy
Jens Axboe zaslal sadu změn i s množstvím oprav, které byly začleněny.
Prototyp systémového volání splice() vypadá následovně:
long splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out,
size_t len, unsigned int flags);
Při pohledu na koncept na vyšší úrovni se v jádře objevuje nový pojem
"náhodný jaderný buffer" (random kernel buffer), který je vystaven do
uživatelského prostoru. Jinými slovy, splice() pracuje na jaderném
bufferu, nad kterým má uživatel kontrolu.
Volání splice() způsobí přesun dat mezi dvěma popisovači souboru
(file descriptors), bez nutnosti přesunout data z jádra do uživatelského prostoru a
zpět. Jádro přesune až len dat z deskriptoru souboru
fd_in do deskriptoru souboru fd_out, kde jeden z
deskriptorů musí být roura (pipe). Takže ve velmi realném (ale stále
abstraktním) smyslu, splice() není nic jiného, než
read()/write() do jaderného bufferu.
Dvě hodnoty offsetu (off_in a off_out) ukazují, na kterou pozici by měl
každý deskriptor souboru být umístěný před začátkem přesunu dat. Všimněte si,
že offsety se předávají pomocí ukazatelů, které jsou příslušným způsobem
upraveny po čtení/zápisu z/do bufferu. Z uživatelského prostoru se může použít
ukazatel NULL k indikaci, že se má použít stávající offset. Nicméně
je chyba použít NULL ukazatel jako offset k přiřazené rouře
(pipe).
flags upravuje, jak se kopírování provádí:
SPLICE_F_MOVE Pokusí se přesunout stránky místo kopírování. Toto je pouze
doporučení jádra: stránky se stále mohou kopírovat, jestliže
jádro nemůže přesunout stránky z roury (pipe), anebo
buffery rour (pipe buffers) neodkazují na celé stránky.SPLICE_F_NONBLOCK Neblokuj I/O. Toto udělá spojovací operace nad rourou
(splice pipe operation) neblokující. Nicméně
i tak splice() může blokovat;
deskriptory souboru, které jsou spojovány
do/z mohou blokovat (za předpokladu, že
nemají nastavený flag O_NONBLOCK).
SPLICE_F_MORE Více dat bude přicházet v následujících subsekvenčních spojích.
Pouze užitečné doporučení jádra, pokud
fd_out je socket.
A kde byste ve skutečnosti chtěli použít splice()? Normálně byste použili
splice()tam, kde chcete kopírovat z jednoho zdroje do druhého, aniž byste
chtěli vidět data, která se kopírují. Použití splice() vám nabízí
efektivnější způsob, jak to udělat. Takto se vyhnete zbytečné alokaci paměti a
memcpy() z/do bufferu v uživatelském prostoru.
Pokud byste chtěli kopírovat soubor, mohli byste to napsat tradičním způsobem v uživatelském prostoru:
for (;;) {
char *p;
int ret = read(input, buffer, BUFSIZE);
if (!ret)
break;
if (ret < 0) {
if (errno == EINTR)
continue;
.. exit with an inpot error ..
}
p = buffer;
do {
int written = write(output, p, ret);
if (!written)
.. exit with filesystem full ..
if (written < 0) {
if (errno == EINTR)
continue;
.. exit with an output error ..
}
p += written;
ret -= written;
} while (ret);
}
s tím rozdílem, že byste neměli buffer v uživatelském prostoru, a kde jsou
systémová volání read() a write() nahrazena systémovým voláním
splice() do/z roury (pipe). Takže jediné, co se změní je to, kde ve skutečnosti
existuje buffer:
int pipefd[2], r;
r = pipe(pipefd);
if (r < 0)
die("pipe");
for (;;) {
int nr = splice(fd_in, NULL, pipefd[1], NULL, INT_MAX,
SPLICE_F_MOVE | SPLICE_F_MORE);
if (!nr)
break;
if (nr < 0) {
if (errno == EINTR)
continue;
.. exit with an inpot error ..
}
do {
int ret = splice(pipefd[0], NULL, fd_out, NULL, nr, SPLICE_F_MOVE);
if (!ret)
.. exit with filesystem full ..
if (ret < 0) {
if (errno == EINTR)
continue;
.. exit with an output error ..
}
nr -= ret;
} while (nr);
}
Ne každý deskriptor souboru se může použít se splice() a důvodem je to, že to
ješte nikdo nepotřeboval, a tudíž ani nikdo nenapsal.
Kombinace možných souborových deskriptorů:
| in | \outpipe | reg | chr | unix | tcp | udp | raw |
|---|---|---|---|---|---|---|---|
| pipe | yes | yes | yes | yes | yes | yes | yes |
| reg | yes | no | no | no | no | no | no |
| chr | yes | no | no | no | no | no | no |
| unix | no | no | no | no | no | no | no |
| tcp | yes | no | no | no | no | no | no |
| udp | no | no | no | no | no | no | no |
| raw | no | no | no | no | no | no | no |
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Můj snippet jsem ve skutečnosti použil pro kopírování tcp ipv4 spojení na disk. Což jsem mohl zmínit. Moje chyba.
Pamatuju si, ze sendfile() ve 2.4 fungoval dobre, ale ve 2.6 byl omezeny jen na sockety. Ted koukam do man a uz to zase zprovoznili:
In Linux kernels before 2.6.33, out_fd must refer to a socket. Since Linux 2.6.33 it can be any file. If it is a regular file, then sendfile() changes the file offset appropriately.
Nastesti slo chytat chybovy kod a fallbacknout do manualniho blokoveho rezimu.
Nicméně je chyba použít NULL ukazatel jako offset k přiřazené rouře (pipe).Nema to byt opacne? V prikladech je NULL..
Takže čtení z roury s offsetem 1 je chyba a proto se musí offset u roury nastavit na NULL. Následuje chybné čtení z roury:
int pipefd[2];
pipe(pipefd)
loff_t pipe_offset = 1;
splice(pipefd[0], &pipe_offset, ...);
nakolik se vázat na linuxově specifické služby
V praxi stejně použijete nějaký wrapper, který zavolá splice() tam, kde je k dispozici, a nahradí ho pomocí univerzálních funkcí tam, kde není.
Poslední dobou mě třeba nadzvedlo zavedení printf("%m") v util-linux
Pominu-li, že tohle zrovna bude spíš glibc-specific než linux-specific, tak zrovna v util-linux mi použití linux-specific featur zas až tak absurdní nepřipadá. :-)
(teda pokud v eglibc apod. ten %m není definovaný).
Chápu, že pokrok nelze zastavit, otázka ale zůstává, nakolik se vázat na linuxově specifické služby.Vzhledem k rozšířenosti Linuxu vs. ostatních unixových OS na nových strojích... asi bych to neřešil. Ať si to řeší ti, co tu "exotiku" provozují. Proč exotiku? Minimálně na desktopu za měřenou dobu existence AbcLinuxu BSD/Solaris/ostatní trvale padají a jestli ta křivka nezmění tvar, tak to za pár roků bude nula. A nejsem ochoten věřit, že by to na serverech bylo až tak jinak. Taková bomba to ZFS není.
Dneska si kazdy vymysli svoje kolo a neohlizi se na to jak vypadaji kola tech ostatnich.Dneska?
Unfortunately, in particular since OpenSSH does authentication, it runs into a *lot* of differences between Unix operating systems OpenSSH Portable Release
Dovolil bych si upozornit, ze v pripade pouziti na prenos dat ze souboroveho systemu se spolehlivost vyrazne lisi implementace od implementace. Takovy reiser4 vraci nuly misto dat a indikuje success. Verim, ze u jinych fs se problem neobjevuje, ale clovek nikdy nevi, kdo co pouziva za jadro a jake data tam opravdu proudi. Meli jsme v Gnome trosku bugreportu na ztracene data... 