Byla vydána nová verze 1.16.0 klienta a serveru VNC (Virtual Network Computing) s názvem TigerVNC (Wikipedie). Z novinek lze vypíchnout nový server w0vncserver pro sdílení Wayland desktopu. Zdrojové kódy jsou k dispozici na GitHubu. Binárky na SourceForge. TigerVNC je fork TightVNC.
Byla vydána nová verze 4.6 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.
Rozsáhlá modernizace hardwarové infrastruktury Základních registrů měla zabránit výpadkům digitálních služeb státu. Dnešnímu výpadku nezabránila.
Čínský startup Kimi představil open-source model umělé inteligence Kimi K2.5. Nová verze pracuje s textem i obrázky a poskytuje 'paradigma samosměřovaného roje agentů' pro rychlejší vykonávání úkolů. Kimi zdůrazňuje vylepšenou schopnost modelu vytvářet zdrojové kódy přímo z přirozeného jazyka. Natrénovaný model je dostupný na Hugging Face, trénovací skripty však ne. Model má 1 T (bilion) parametrů, 32 B (miliard) aktivních.
V Raspberry Pi OS lze nově snadno povolit USB Gadget Mode a díky balíčku rpi-usb-gadget (CDC-ECM/RNDIS) mít možnost se k Raspberry Pi připojovat přes USB kabel bez nutnosti konfigurování Wi-Fi nebo Ethernetu. K podporovaným Raspberry Pi připojeným do USB portu podporujícího OTG.
Konference Installfest 2026 proběhne o víkendu 28. a 29. března v budově FELu na Karlově náměstí v Praze. Přihlásit přednášku nebo workshop týkající se Linuxu, otevřených technologií, sítí, bezpečnosti, vývoje, programování a podobně lze do 18. února 0:15.
Fedora Flock 2026, tj. konference pro přispěvatele a příznivce Fedory, bude opět v Praze. Proběhne od 14. do 16. června. Na Flock navazuje DevConf.CZ 2026, který se uskuteční 18. a 19. června v Brně. Organizátoři konferencí hledají přednášející, vyhlásili Call for Proposals (CfP).
Z80-μLM je jazykový model 'konverzační umělé inteligence' optimalizovaný pro běh na 8-bitovém 4Mhz procesoru Z80 s 64kB RAM, technologii z roku 1976. Model používá 2-bitovou kvantizaci a trigramové hashování do 128 položek, což umožňuje zpracování textu i při velmi omezené paměti. Natrénovaný model se vejde do binárního souboru velkého pouhých 40 KB. Tento jazykový model patrně neprojde Turingovým testem 😅.
Digitální a informační agentura (DIA) na přelomu roku dokončila rozsáhlou modernizaci hardwarové infrastruktury základních registrů. Projekt za 236 milionů korun by měl zabránit výpadkům digitálních služeb státu, tak jako při loňských parlamentních volbách. Základní registry, tedy Registr práv a povinností (RPP), Informační systém základních registrů (ISZR) a Registr obyvatel (ROB), jsou jedním z pilířů veřejné správy. Denně
… více »Evropská komise (EK) zahájila nové vyšetřování americké internetové platformy 𝕏 miliardáře Elona Muska, a to podle unijního nařízení o digitálních službách (DSA). Vyšetřování souvisí se skandálem, kdy chatbot s umělou inteligencí (AI) Grok na žádost uživatelů na síti 𝕏 generoval sexualizované fotografie žen a dětí. Komise o tom dnes informovala ve svém sdělení. Americký podnik je podezřelý, že řádně neposoudil a nezmírnil rizika spojená se zavedením své umělé inteligence na on-line platformě.
Ve chvíli, kdy jsem viděl (teď už) předposlední xkcd mi bylo jasné, že tohle prostě musím mít! Ale jak na to? Program ln má sice parametr -d, ale i pod rootem vrací EPERM. Takže přece jen ty zdrojáky zas budu muset otevřít.
Takže, co budeme potřebovat? Zdrojáky jádra, včetně funkčního configu, nástroje pro překlad - gcc, binutils, make, virtuální stroj nebo dobré zálohy a odvážného ducha.
A jak na to? Nejdřív by to chtělo zjistit na čem to vlastně chcípá. OK, já vím, že ln volá syscall link ale budeme předstírat, že to nevím. krok 1: strace ln -d /existujici/adresar /novy/hardlink. A po chvilce hledání ve výpisu snad najdete tohle:
linkat(AT_FDCWD, "1", AT_FDCWD, "2", 0) = -1 EPERM (Operation not permitted)
Takže na řadu přichází krok 2: ve zdrojáku najít odpovídající syscall. Hledáme SYSCALL_DEFINE5(linkat (5 protože linkat má 5 parametrů). Najdeme ho ve fs/namei.c:2939 (kernel 3.1.2). Jenže, v té funkci (mimochodem, vědeli jste, že se goto stále používá? :))) ) nic EPERM nevrací. Nabízí se několik možností - vzít debugger, ohackovat to přes printk("prvni test prosel"); nebo si prostě tipnout. No, a zjistíme, že je to ve funkci vfs_link, která je definovaná jen o pár řádků výš :), Konkrétně to jsou řádky 2911 a 2912, s kódem:
if (S_ISDIR(inode->i_mode)) return -EPERM;
No, a máme jasno, stačí zakomentovat/smazat, překompilovat jádro, rebootovat a jedééém!
root@debian:/mnt# ls -a . .. lost+found root@debian:/mnt# mkdir prvni root@debian:/mnt# mkdir druhy root@debian:/mnt# mkdir prvni/1 root@debian:/mnt# mkdir prvni/2 root@debian:/mnt# ln -d prvni/1 druhy/jednicka root@debian:/mnt# echo "foo" > prvni/1/testfile root@debian:/mnt# cat druhy/jednicka/testfile foo root@debian:/mnt# ln -d druhy/ prvni/1/dvojka root@debian:/mnt# cd prvni/1 root@debian:/mnt/prvni/1# ls dvojka testfile root@debian:/mnt/prvni/1# cd dvojka root@debian:/mnt/prvni/1/dvojka# ls jednicka root@debian:/mnt/prvni/1/dvojka# cd jednicka/ root@debian:/mnt/prvni/1/dvojka/jednicka# ls dvojka testfile root@debian:/mnt/prvni/1/dvojka/jednicka# cd /mnt root@debian:/mnt# # co takhle zkusit treba find? root@debian:/mnt# find . . ./prvni ./prvni/1 ./prvni/1/testfile ./prvni/1/dvojka find: File system loop detected; `./prvni/1/dvojka/jednicka' is part of the same file system loop as `./prvni/1'. ./prvni/2 ./lost+found ./druhy ./druhy/jednicka ./druhy/jednicka/testfile find: File system loop detected; `./druhy/jednicka/dvojka' is part of the same file system loop as `./druhy'. root@debian:/mnt# # ta mrcha se nezacykli, no co, treba budu mit s e2fsck vetsi stesti root@debian:/mnt# cd .. root@debian:/# umount mnt root@debian:/# e2fsck -f /zerofile e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Entry 'jednicka' in /druhy (1833) is a link to directory /prvni/1 (13). Clear<y>? no Entry 'dvojka' in /prvni/1 (13) is a link to directory /druhy (1833). Clear<y>? no Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /zerofile: ********** WARNING: Filesystem still has errors **********
Mno, takže minimálně pod ext4 to i funguje. Nevím, jak se na to bude tvářit reiserfs, btrfs, xfs nebo jfs, ale snad by s tím nemusel být problém, až bude čas vyzkouším. A mezitím budu přemýšlet, k čemu je to vlastně dobré... :)
Koukám, že je trochu problém s rm:
root@debian:/mnt# rm -rf prvni/ rm: WARNING: Circular directory structure. This almost certainly means that you have a corrupted file system. NOTIFY YOUR SYSTEM MANAGER. The following directory is part of the cycle: `prvni/1/dvojka/jednicka' rm: cannot remove `prvni/1': Directory not empty
Tiskni
Sdílej:
BTW hardlinkovat adresáře šlo krásně ve FAT. Tam se to někdy i povedlo nechtěně
.
Goto v jádře je celkem normálka, v každým modulu jich je několik. Ono když se v sekvenci kontroluje třeba 10 věcí (neNULLový ukazatel na strukturu, návratová hodnota několika registračních funkcí...), tak v případě něčeho jako if, by odsazení v místě po všech kontrolách bylo extrémně vpravo
. Nebo by se musely použít funkce, co by to obalily a to by tam bylo zase 10 zbytečných funkcí.
P.S. Grep v MC na .[cSh] a "goto" mě našel zatím 80000 hitů a stále roste
.
.
V kernelu se goto používá jako escape continuation, v podstatě ekvivalent vyhození výjimky. To je ve skutečnosti (IMO) nejlepší způsob, jak výjimečné situace řešit; při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.
longjmp. Nebo snad v klibc longjmp nemají?
goto, to jo...
goto použít pouze v rámci funkce.
při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.
Zvlášť při dodržení coding style, který předepisuje odsazování osmiznakovým tabulátorem a limit 80 znaků na řádek. Skalním odpůrcům goto doporučuji si nějakou funkci cvičně zkusit přepsat. Pokud by ani to nepomohlo, tak počkat půl roku a zkusit se v ní zorientovat.
pokus o alokaci prostředku 1; pokud selže goto 1; pokus o alokaci prostředku 2; pokud selže goto 2; pokus o alokaci prostředku 3; pokud selže goto 3; samotná akce; návěstí 3: uvolnění prostředku 3; návěstí 2: uvolnění prostředku 2; návěstí 1: uvolnění prostředku 1;
Jinjak ty goto v jádře typicky vypadají taktoPřesněji takto:
pokus o alokaci prostředku 1;
pokud selže goto konec;
pokus o alokaci prostředku 2;
pokud selže goto uvolni1;
pokus o alokaci prostředku 3;
pokud selže goto uvolni2;
...
uvolni2:
uvolnění prostředku 2;
uvolni1:
uvolnění prostředku 1;
konec:
return;
Je to mnohem čistší a hlavně přehlednější řešení, než kdyby se to dělalo bez goto pomocí vnořených ifů nebo pomocí opakování téhož kódu u každého selhání.
if (find ("goto", kod))
body -= 2;
nikdy nepochopil a vždy jsem to bojkotoval. Já bohužel pamatuju ještě doby BASICu a pamatuju, že ani s GOTO a GOSUB to nebylo tak strašné když to nepsalo prase, které se v tom samo nezamotalo. Tendenci vnucovat programátorovi jak má psát a snažit se ho vyučovat jsem též nikdy nepochopil. Aneb nač dělat věci jednoduše, když si to můžeme zasvinit konstruktorama, destrukotama, excepšnama a bůh ví čím ještě. Vždyť GOTO se velice snadno dá přeložit na jmp instrukci, jednu z nejpřirozenějších instrukcí procesoru.
No, ono když vidíte v kódu něco na způsob
if (problém)
goto label2;
...
label1:
úklid
return 0;
label2:
něco
goto label1;
}
tak na vás přímo dýchne tak doba BASICu na osmibitech…
Tohle není kód vanilla jádra, tenhle obrat jsem viděl v jednom modulu, který ve vanilla jádře není. Prohodit pořadí nejde, protože to, co je za label2, se nemá vykonat, pokud k němu dojdete přirozenou cestou nebo na něj skočíte odjinud. Správně by to mohlo být třeba takto:
if (problém) {
něco
goto label1;
}
...
label1:
úklid
return 0;
}
Ale i v upstreamových projektech se občas najdou strašidelné věci. Máte-li dobrý žaludek, můžete zkusit prozkoumat třeba funkci send_dg() v implementaci resolveru v glibc.
A mezitím budu přemýšlet, k čemu je to vlastně dobré... :)Jako hracka vazne dobre :) Ale realne pokud potrebujes hardlink na adresar, resilo by se to pomoci bind mount:
mount --bind /kdesi/cosi /nekde/jinde/cosi.
/
[/bind je prázdné]
/home
/var
rbind / do /bind:
/
/bind
[/bind/bind je prázdné]
/bind/home
/bind/var
/home
/var
..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybrat, což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.
Např. by pak byl problém s položkou "..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybratIMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.
což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.No, zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu :)
IMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.
Co prosím? Neusuzujte, prosím, jen na základě toho, jak se (defaultně) chová příkaz cd v bashi.
zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu
To není až tak překvapivé, vzhledem k tomu, že se s jejich existencí nepočítá. Musel byste si opatchovat syscall rmdir() nebo unlinkat() a když se zamyslíte jak, zjistíte, že není úplně triviální udělat to tak, aby to fungovalo.
ln -s vim emacs
Nieže by sa mi nechcelo hrať sa s jadrom, ale nechcem riskovať pád systému. Som rád, že mám Linux stabilný (veď za to ho už 3 roky používam) a nechcem riskovať nejakým blbým preklepom jeho pád.