<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Programování – Tech-blog</title>
		<link>https://tech-blog.chatujme.cz/rubrika/programovani</link>
		<description>Rubrika Programování</description>
		<language>cs</language>
		<lastBuildDate>Sun, 09 Aug 2026 09:34:58 GMT</lastBuildDate>
		<ttl>60</ttl>
		<atom:link href="https://tech-blog.chatujme.cz/rubrika/programovani/rss.xml" rel="self" type="application/rss+xml" />
		<item>
			<title>Registr kontejnerů Harbor vyměnil ve verzi 2.15.2 Redis za Valkey</title>
			<link>https://tech-blog.chatujme.cz/clanek/harbor-vymenil-redis-za-valkey</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/harbor-vymenil-redis-za-valkey</guid>
			<pubDate>Sun, 09 Aug 2026 09:34:58 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Harbor, rozšířený open source registr kontejnerů z nadace CNCF, od začátku stál na Redisu jako rychlé vnitřní úložiště. Ve verzi 2.15.2 ho vyměnil za Valkey, fork Redisu pod hlavičkou Linux Foundation. Protokol zůstal stejný, takže migrace se obešla skoro bez zásahu do kódu; hlavním důvodem nebyla rychlost, ale licence a správa projektu.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-harbor-redis-valkey-5c57d409.jpg" alt="Kontejnerový terminál s jeřáby a stohy lodních kontejnerů u vody"><figcaption>Kontejnerový terminál v&nbsp;přístavu Red Hook v&nbsp;New Yorku. Registr Harbor spravuje obrazy kontejnerů, ne ty ocelové. Foto: King of Hearts, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Harbor je open source registr kontejnerů – místo, kam si organizace ukládají obrazy kontejnerů, balíčky Helm, artefakty OCI i&nbsp;modely pro strojové učení. Patří k&nbsp;nejrozšířenějším řešením mezi těmi, kdo si registr provozují sami, a&nbsp;v&nbsp;nadaci CNCF má status graduovaného projektu, tedy nejvyšší stupeň zralosti. Od začátku k&nbsp;němu patřil ještě jeden kus techniky, o&nbsp;kterém se moc nemluví: Redis. Ve verzi 2.15.2 ho Harbor vyměnil za&nbsp;Valkey.</p>

<h2>K&nbsp;čemu je registru rychlé úložiště</h2>

<p>Harbor není prostý souborový server. Při každém nahrání nebo stažení obrazu odbavuje několik věcí zároveň a&nbsp;část z&nbsp;nich by hlavní databázi zbytečně zatěžovala. Proto k&nbsp;sobě od začátku měl Redis, rychlé úložiště, které data drží v&nbsp;paměti. Podle týmu Harboru na něm stojí čtyři věci:</p>

<ul>
<li>přihlašovací sezení uživatelů,</li>
<li>vyrovnávací paměť manifestů, aby se popis obrazu (OCI manifest) při stažení nemusel pokaždé číst z&nbsp;databáze,</li>
<li>fronta úloh na běh na pozadí – kontroly zranitelností, úklid nepoužitých dat a&nbsp;replikace mezi registry,</li>
<li>počítadlo kvót, které hlídá, kolik obrazů se do&nbsp;jednoho projektu nahrává naráz.</li>
</ul>

<p>Po výměně dělá Valkey přesně totéž. Uživatel ani provozovatel na sobě změnu nepozná, protože obě úložiště mluví stejným jazykem.</p>

<h2>Co se stalo ve verzi 2.15.2</h2>

<p>Tým Harboru otevřel <a href="https://github.com/goharbor/harbor/issues/22935" rel="noopener">návrh #22935</a> v&nbsp;březnu 2026 s&nbsp;jednoduchým zadáním: nahradit Redis Valkeyem ve všech místech, kde ho registr používá, a&nbsp;zařídit hladký přechod. Vlastní změnu přinesl <a href="https://github.com/goharbor/harbor/pull/23157" rel="noopener">pull request #23157</a>, který se do hlavní větve dostal 28.&nbsp;dubna. K&nbsp;uživatelům ji tým poslal později, přenesením do&nbsp;opravného vydání: v&nbsp;<a href="https://github.com/goharbor/harbor/releases/tag/v2.15.2" rel="noopener">poznámkách k&nbsp;verzi 2.15.2</a> je vedená jako přenesený commit „replace redis with valkey as cache backend“.</p>

<p>Technicky šlo o&nbsp;výměnu obrazu vnitřní cache. Harbor nově staví na obrazu valkey-photon, tedy Valkey postaveném nad distribucí Photon OS, ze které skládá i&nbsp;ostatní své součásti.</p>

<h2>Proč pryč od Redisu</h2>

<p>Důvod tým shrnul stroze: Redis v&nbsp;posledních letech opakovaně měnil licenci, a&nbsp;to je pro projekt, který na něm závisí, riziko. Redis si tou licenční houpačkou vážně prošel. V&nbsp;roce 2024 opustil svou původní licenci BSD a&nbsp;přešel na&nbsp;dvojici zdrojově dostupných licencí SSPL a&nbsp;RSAL, které Open Source Initiative za&nbsp;svobodné neuznává. Právě tehdy vznikl Valkey jako fork spravovaný nadací Linux Foundation. V&nbsp;květnu 2025 se Redis <a href="https://redis.io/blog/agplv3/" rel="noopener">vrátil k&nbsp;otevřené licenci</a>, když k&nbsp;osmé verzi přidal jako možnost AGPLv3, kterou už OSI schvaluje. Vývoj Redisu se od té doby nezastavil – v&nbsp;řadě&nbsp;8 přišel třeba <a href="/clanek/redis-8-10-compact-hash-sablony-poli">úspornější způsob ukládání hašů</a>.</p>

<p>Přesto Harbor zvolil Valkey. Za&nbsp;rozhodnutím je podle týmu souběh několika věcí: permisivní licence BSD 3-Clause klade na&nbsp;uživatele méně omezení než copyleftová AGPL, projekt vede Linux Foundation s&nbsp;předvídatelným cyklem vydání a&nbsp;Valkey je zpětně kompatibilní na&nbsp;úrovni protokolu. Používá totiž stejný protokol RESP jako Redis, takže Harbor nemusel v&nbsp;kódu, který s&nbsp;úložištěm mluví, přepsat ani řádek; upravily se jen šablony obrazů.</p>

<p>O&nbsp;rychlost přitom nešlo. Valkey se sice chlubí tím, že se od&nbsp;svého základu ve verzi 7.2 zrychlil – jeho autoři uvádějí u&nbsp;verze 9.1 až dva miliony požadavků za&nbsp;sekundu ve&nbsp;vlastních měřeních, tedy víc než dvojnásobek –, jenže to je číslo výrobce a&nbsp;Harbor ho jako důvod přechodu neuvádí. Rozhodla licence a&nbsp;způsob správy, ne benchmark.</p>

<h2>Přechod zatím není úplný</h2>

<p>Jedna věc kulhá: oficiální šablona Helm, kterou většina lidí Harbor instaluje, se zatím neupravila a&nbsp;pořád jako výchozí stahuje obraz Redisu. Kdo chce Harbor s&nbsp;Valkeyem hned, musí obraz vnitřní cache přepsat ručně. V&nbsp;praxi to jsou dva parametry navíc při instalaci:</p>

<pre><code class="language-bash">helm install harbor harbor/harbor \
  --set redis.internal.image.repository=goharbor/valkey-photon \
  --set redis.internal.image.tag=v2.15.2</code></pre>

<p>První parametr říká šabloně, ať místo Redisu vezme obraz valkey-photon z&nbsp;Docker Hubu, druhý určuje jeho verzi. Až se výchozí hodnota v&nbsp;šabloně změní, odpadne i&nbsp;tohle.</p>

<h2>Co z&nbsp;toho plyne</h2>

<p>Výměna je z&nbsp;pohledu uživatele nenápadná a&nbsp;právě to je na&nbsp;ní podstatné: díky společnému protokolu šla provést, aniž by se venku cokoli pohnulo. Zapadá do&nbsp;širšího obrázku – Valkey dnes nabízejí jako spravovanou službu Amazon, Google i&nbsp;menší poskytovatelé a&nbsp;Harbor je jen jedním z&nbsp;větších projektů, které k&nbsp;němu od&nbsp;Redisu přešly. Kdo registr provozuje, si zatím vystačí se&nbsp;dvěma parametry navíc; zbytek se stane sám, až se doladí šablona.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://valkey.io/blog/harbor-chose-valkey/" rel="noopener">Harbor Chose Valkey</a>, blog projektu Valkey, 28.&nbsp;července 2026</li>
<li><a href="https://github.com/goharbor/harbor/issues/22935" rel="noopener">Replace Redis with Valkey</a>, návrh #22935 v&nbsp;repozitáři goharbor/harbor</li>
<li><a href="https://github.com/goharbor/harbor/pull/23157" rel="noopener">feat: replace redis with valkey as cache backend</a>, pull request #23157</li>
<li><a href="https://github.com/goharbor/harbor/releases/tag/v2.15.2" rel="noopener">Harbor v2.15.2</a>, poznámky k&nbsp;vydání</li>
<li><a href="https://redis.io/blog/agplv3/" rel="noopener">Redis is now available under the AGPLv3 open source license</a>, blog Redisu, květen 2025</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-harbor-redis-valkey-5c57d409.jpg" length="100040" type="image/jpeg" />
		</item>
		<item>
			<title>WebSocket drží obousměrné spojení, socket.io k němu přidává znovupřipojení a skupiny</title>
			<link>https://tech-blog.chatujme.cz/clanek/realtime-websocket-socketio</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/realtime-websocket-socketio</guid>
			<pubDate>Sun, 09 Aug 2026 08:44:53 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Prohlížeč se serveru ptá na novinky pořád dokola: pošle dotaz, dostane odpověď, spojení zavře. U chatu nebo živého přehledu to buď zbytečně zatěžuje, nebo novinku na chvíli prošvihne. WebSocket místo toho drží jedno spojení otevřené oběma směry a socket.io k němu přidává znovupřipojení, skupiny a přechod na starší přenos tam, kde WebSocket neprojde.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-realtime-websocket-socketio-0c59fa39.jpg" alt="Sál plný serverů propojených kabely"><figcaption>Realtime spojení drží kanál mezi prohlížečem a&nbsp;serverem otevřený; sál se servery je jeho druhý konec. Foto: BalticServers.com, Wikimedia Commons (CC BY-SA 3.0)</figcaption></figure>

<p>Běžná webová stránka se serveru ptá pořád stejně: pošle požadavek, dostane odpověď, spojení se zavře. Když má ale ukazovat něco, co se mění každou chvíli – zprávu v&nbsp;chatu, upozornění, číslo na živém přehledu –, tenhle model naráží. WebSocket ho řeší jinak: otevře jedno spojení a&nbsp;nechá ho otevřené oběma směry.</p>

<h2>Proč se opakovaný dotaz nehodí na živá data</h2>

<p>Nejjednodušší cesta k&nbsp;„živé“ stránce je HTTP polling: prohlížeč se v&nbsp;pravidelném intervalu ptá, jestli nejsou nová data. Každý dotaz je celý požadavek i&nbsp;s&nbsp;hlavičkami, i&nbsp;když odpověď zní „nic nového“, a&nbsp;interval se nedá nastavit dobře – krátký znamená spoustu prázdných dotazů, dlouhý zprávu se zpožděním. Navíc je to jednosměrné: server čeká, až se stránka zeptá. Šikovnější long polling (server odpověď drží, dokud nemá co poslat) zpoždění odstraní, ale je to jen obcházení toho, že HTTP na obousměrný provoz stavěné nebylo.</p>

<h2>WebSocket: jedno spojení oběma směry</h2>

<p>WebSocket je samostatný protokol popsaný v&nbsp;RFC&nbsp;6455 (vydané v&nbsp;prosinci&nbsp;2011). Spojení začíná jako obyčejný HTTP požadavek, který serveru řekne „přepni tohle spojení na WebSocket“ (handshake). Když server souhlasí, totéž TCP spojení zůstane otevřené a&nbsp;obě strany po něm můžou kdykoli posílat zprávy – bez nových hlaviček, bez čekání na dotaz. Adresa má schéma <code>ws://</code>, pro šifrovanou variantu <code>wss://</code>.</p>

<p>V&nbsp;prohlížeči se s&nbsp;tím pracuje přes objekt <code>WebSocket</code>: vytvoří se konstruktorem, poslouchají se události <code>open</code>, <code>message</code>, <code>error</code> a&nbsp;<code>close</code>, posílá se metodou <code>send()</code>.</p>

<pre><code class="language-javascript">// Klient v prohlížeci
const socket = new WebSocket("wss://example.com/chat");

socket.addEventListener("open", () =&gt; {
  socket.send("ahoj");
});

socket.addEventListener("message", (event) =&gt; {
  console.log("prislo:", event.data);
});

socket.addEventListener("close", () =&gt; {
  console.log("spojeni se zavrelo");
});</code></pre>

<p>Stav spojení drží vlastnost <code>readyState</code>. MDN u&nbsp;toho upozorňuje na jednu věc: WebSocket API neumí takzvaný backpressure – když zprávy chodí rychleji, než je stránka stíhá zpracovat, hromadí se v&nbsp;paměti a&nbsp;tempo si musí program ohlídat sám. Server se píše v&nbsp;Node.js, Pythonu nebo čemkoli jiném přes knihovnu pro daný jazyk.</p>

<h2>Co k&nbsp;WebSocketu přidává socket.io</h2>

<p>Holý WebSocket funguje, ale pár věcí neřeší: co když spojení spadne, co když ho podniková proxy nebo antivirus vůbec nepustí a&nbsp;jak zprávy rozlišovat podle druhu. Tyhle mezery zaplňuje <strong>socket.io</strong>, knihovna pro Node.js a&nbsp;prohlížeč, která nad WebSocketem staví pohodlnější vrstvu.</p>

<p>Uvnitř se dělí na dvě části. Spodní, Engine.IO, se stará o&nbsp;spojení a&nbsp;výběr přenosu. Má tři: HTTP long-polling, WebSocket a&nbsp;novější WebTransport. Trik je v&nbsp;pořadí: spojení se ve výchozím nastavení naváže nejdřív přes long-polling, který projde skoro všude, a&nbsp;teprve pak se po tichu <em>povýší</em> na WebSocket, pokud to jde. Tomuhle záložnímu chování se říká fallback a&nbsp;je to důvod, proč socket.io funguje i&nbsp;tam, kde čistý WebSocket neprojde. Horní vrstva pak přidává znovupřipojení, frontu neodeslaných zpráv, potvrzování doručení, skupiny (rooms) a&nbsp;jmenné prostory (namespaces).</p>

<p>Server se namontuje na HTTP server a&nbsp;poslouchá událost <code>connection</code>. Zprávy jsou pojmenované události – místo jednoho anonymního proudu dat má každý druh zprávy své jméno, na které se navěsí obsluha.</p>

<pre><code class="language-javascript">// Server (Node.js)
const { createServer } = require("node:http");
const { Server } = require("socket.io");

const server = createServer();
const io = new Server(server);

io.on("connection", (socket) =&gt; {
  console.log("klient se pripojil");

  socket.on("zprava", (text) =&gt; {
    io.emit("zprava", text); // rozesle vsem pripojenym
  });

  socket.on("disconnect", () =&gt; {
    console.log("klient odpojen");
  });
});

server.listen(3000);</code></pre>

<p>Klient v&nbsp;prohlížeči je zrcadlo: zavolá <code>io()</code>, poslouchá stejné události přes <code>on()</code> a&nbsp;posílá je přes <code>emit()</code>.</p>

<pre><code class="language-javascript">// Klient v prohlizeci
const socket = io();

socket.on("zprava", (text) =&gt; {
  // vykresli prichozi zpravu
});

socket.emit("zprava", "ahoj");</code></pre>

<p>Volání <code>io.emit()</code> rozešle událost všem připojeným. To se ale hodí málokdy – zprávu z&nbsp;jedné chatovací místnosti nemají dostat všichni na webu.</p>

<h2>Rooms: vysílání jen části klientů</h2>

<p>Room je pojmenovaný kanál, do kterého socket vstoupí a&nbsp;zase z&nbsp;něj vystoupí. Je to čistě serverová věc – klient o&nbsp;seznamu svých místností nic neví. Vstup zařídí <code>socket.join()</code>, vysílání jen do dané místnosti pak <code>io.to("nazev").emit(...)</code>.</p>

<pre><code class="language-javascript">io.on("connection", (socket) =&gt; {
  socket.join("mistnost-42");
});

// odejde jen do klientu v teto mistnosti
io.to("mistnost-42").emit("zprava", "ahoj mistnosti");</code></pre>

<p>Vysílání z&nbsp;jednoho socketu přes <code>socket.to("nazev").emit(...)</code> dostanou všichni v&nbsp;místnosti kromě odesílatele – přesně to, co chatovací okno potřebuje. Při odpojení socket opustí všechny své místnosti sám. Rooms se hodí i&nbsp;na adresování jednoho uživatele: socket se přidá do místnosti pojmenované jeho identifikátorem a&nbsp;upozornění pak dorazí na všechny jeho karty a&nbsp;zařízení najednou.</p>

<h2>Když spadne spojení</h2>

<p>Jestli spojení žije, hlídá tlukot srdce (heartbeat): server v&nbsp;pravidelném intervalu (ve výchozím nastavení po zhruba 25&nbsp;sekundách) pošle paket <em>ping</em> a&nbsp;čeká na <em>pong</em>; když se nevrátí, spojení se považuje za zavřené. Po výpadku se socket.io ve výchozím nastavení sám snaží připojit znovu – opakovaně a&nbsp;s&nbsp;prodlužujícími se odstupy, aby po pádu serveru nepřišla záplava dotazů naráz. Neodeslané zprávy počkají ve frontě.</p>

<h2>Kdy stačí jednosměrné SSE</h2>

<p>WebSocket ani socket.io nejsou vždycky potřeba. Když data tečou jen jedním směrem, ze serveru do prohlížeče, stačí lehčí nástroj: Server-Sent Events (SSE). Jede po obyčejném HTTP, v&nbsp;prohlížeči se obsluhuje objektem <code>EventSource</code> a&nbsp;znovupřipojení zvládá samo. Podle MDN je to jednosměrné spojení – klient přes něj serveru nic poslat nemůže.</p>

<pre><code class="language-javascript">const zdroj = new EventSource("/udalosti");

zdroj.onmessage = (event) =&gt; {
  console.log(event.data);
};</code></pre>

<p>Na živé skóre, průběžné výsledky výpočtu, tok upozornění nebo streamování logu je SSE často přesně akorát: méně kódu než WebSocket a&nbsp;projde i&nbsp;přes prostředí, kde WebSocket vázne. Jakmile ale potřebujete posílat data i&nbsp;od klienta – typicky psát zprávy –, jednosměrný kanál nestačí a&nbsp;jste zpátky u&nbsp;WebSocketu.</p>

<h2>Kdy realtime sáhnout</h2>

<p>Ve zkratce tři případy. Když se data mění zřídka a&nbsp;pár sekund zpoždění nevadí, stačí obyčejný dotaz nebo občasný polling. Když server jen posílá a&nbsp;klient poslouchá (přehledy, upozornění, průběh), sáhněte po SSE. A&nbsp;teprve tam, kde spolu obě strany mluví oběma směry a&nbsp;na zpoždění záleží – chat, spolupráce v&nbsp;jednom dokumentu, hry, komunitní a&nbsp;chatovací weby –, se vyplatí WebSocket; a&nbsp;pokud chcete fallback, znovupřipojení a&nbsp;skupiny bez ručního dopisování, socket.io nad ním.</p>

<p>Za tu pohodlnou vrstvu se platí: socket.io přenáší data ve vlastním formátu, takže na druhém konci musí být zase socket.io, ne holý WebSocket klient. Kdo potřebuje mluvit s&nbsp;cizí službou nebo si vystačí s&nbsp;jedním druhem zpráv, bývá s&nbsp;čistým WebSocketem jednodušší. Co si vybrat, je hlavně otázka toho, kolik z&nbsp;přidaných funkcí opravdu využijete.</p>

<h2>Zdroje</h2>

<p>Zdroje: <a href="https://socket.io/docs/v4/how-it-works/" rel="noopener">dokumentace socket.io, oddíl How it works</a> (rozdělení na Engine.IO a&nbsp;socket.io, tři přenosy a&nbsp;povyšování spojení), <a href="https://socket.io/docs/v4/rooms/" rel="noopener">tatáž dokumentace k&nbsp;rooms</a> (rooms jsou serverový pojem, <code>join</code> a&nbsp;<code>io.to().emit()</code>), <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSocket" rel="noopener">MDN: WebSocket</a> (události, <code>readyState</code> a&nbsp;chybějící backpressure), <a href="https://datatracker.ietf.org/doc/html/rfc6455" rel="noopener">RFC&nbsp;6455</a> (standard protokolu, prosinec&nbsp;2011) a&nbsp;<a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events" rel="noopener">MDN: Using server-sent events</a> (SSE je jednosměrné).</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-realtime-websocket-socketio-0c59fa39.jpg" length="129866" type="image/jpeg" />
		</item>
		<item>
			<title>Vite podává zdrojový kód přes nativní ES moduly a bundluje ho až pro produkci</title>
			<link>https://tech-blog.chatujme.cz/clanek/vite-typescript-moderni-build-frontendu</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/vite-typescript-moderni-build-frontendu</guid>
			<pubDate>Sun, 09 Aug 2026 08:38:12 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Vite ve vývoji nebundluje: zdrojový kód posílá prohlížeči přes nativní ES moduly a přepisuje ho na vyžádání, takže server startuje takřka okamžitě. Pro produkci ho naopak sbalí do optimalizovaného balíku. TypeScript přitom jen přepisuje, typy nekontroluje.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-vite-typescript-moderni-build-frontendu-ecaa156e.jpg" alt="Okno textového editoru se zdrojovým kódem"><figcaption>Zdrojový kód v editoru při vývoji. Foto: MikeRun, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Vite je nástroj, který stojí mezi vývojářem a prohlížečem: v jednom režimu obsluhuje kód, na kterém se právě pracuje, ve druhém z něj skládá balík pro nasazení. Ty dva režimy fungují každý jinak a právě v tom je jádro toho, proč je Vite rychlý. Vývojový server se rozjede skoro okamžitě i u velké aplikace, produkční build projde celý kód a zoptimalizuje ho. Následující řádky popisují, jak obojí funguje a kde jsou meze.</p>

<h2>Vývojový server nad nativními ES moduly</h2>
<p>Starší nástroje &ndash; bundlery jako webpack &ndash; musely před prvním zobrazením stránky projít celou aplikaci a slepit ji do jednoho souboru. Čím větší projekt, tím delší čekání. Vite tuhle práci rozdělí. Zdrojový kód aplikace, který se mění často, podává prohlížeči přes <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules" target="_blank" rel="noopener">nativní ES moduly</a> (ESM). Prohlížeč si o každý modul řekne sám ve chvíli, kdy ho potřebuje, a Vite ho v tu chvíli přepíše do podoby, které prohlížeč rozumí. Načte se jen to, co je pro aktuální stránku nutné, takže start serveru je takřka okamžitý bez ohledu na velikost projektu.</p>

<p>Výjimkou jsou knihovny z <code>node_modules</code>. Bývají jich stovky a nativní ESM neumí importy typu <code>import { x } from 'knihovna'</code> bez cesty k souboru. Vite je proto jednou předzpracuje (pre-bundling): převede starší formáty CommonJS a UMD na ESM a přepíše importy na platné adresy. Ve Vite 8 tohle dělá Rolldown, bundler psaný v Rustu; podle dokumentace je díky němu studený start výrazně rychlejší než u bundleru psaného v JavaScriptu. Výsledek se drží v mezipaměti, takže se předzpracování při dalších startech přeskočí.</p>

<h2>HMR: výměna jednoho modulu za běhu</h2>
<p>Když se soubor uloží, Vite nezahodí celou stránku. Přes rozhraní HMR (Hot Module Replacement, výměna modulů za běhu) vymění v prohlížeči jen ten modul, který se změnil, a nechá aplikaci ve stavu, v jakém byla &ndash; rozepsaný formulář zůstane vyplněný, otevřený panel otevřený. HMR jede taky přes nativní ESM. Frameworky se na něj napojují: Vite má vestavěnou podporu pro Vue single file components a pro React Fast Refresh. Aktualizace se podle dokumentace projeví v prohlížeči do 50 ms.</p>

<h2>Produkční build: z modulů jeden balík</h2>
<p>Pro nasazení se přístup obrací. Poslat do prohlížeče stovky samostatných souborů přes ESM by na produkci znamenalo stovky požadavků, takže tady Vite naopak bundluje. Build projde závislosti, vyhodí nepoužitý kód (tree-shaking), rozdělí výstup na části (code splitting), zmenší ho (minifikace) a do názvů souborů přidá otisk kvůli cachování.</p>

<p>Historicky na to Vite používal dva různé nástroje: esbuild pro rychlý překlad ve vývoji a Rollup pro důkladnou optimalizaci v produkci. Dvě odlišné pipeline ale znamenaly drobné rozdíly v chování a dvojí systém pluginů. Vite 8 je proto sjednotil do jednoho bundleru, Rolldownu. Ten je psaný v Rustu, k parsování a minifikaci používá Oxc a zůstává kompatibilní se stejným rozhraním pluginů, na které byl ekosystém Rollupu zvyklý. Nastavení buildu se ladí přes <code>build.rolldownOptions</code>.</p>

<pre><code class="language-javascript">import { defineConfig } from 'vite'

export default defineConfig({
  build: {
    rolldownOptions: {
      input: {
        main: 'index.html',
        admin: 'admin.html',
      },
    },
  },
})
</code></pre>

<h2>TypeScript: přepis bez kontroly typů</h2>
<p>Soubory <code>.ts</code> umí Vite importovat rovnou, bez další konfigurace. Důležité je vědět, co přitom dělá a co ne: <strong>typy jen odstraní, nekontroluje je</strong>. Přepis (transpilaci) obstará Oxc, což je řádově rychlejší než klasický <code>tsc</code> &ndash; ale typová kontrola se přeskočí.</p>

<p>Není to nedodělek, ale záměr. Přepis běží po jednotlivých souborech a sedí na model, kdy se každý soubor zpracuje ve chvíli, kdy si o něj prohlížeč řekne. Kontrola typů oproti tomu potřebuje znát celý graf modulů; nacpat ji do téhle pipeline by srazilo rychlost, kvůli které Vite existuje. Typy se proto hlídají zvlášť &ndash; při buildu příkazem <code>tsc --noEmit</code>, během vývoje v editoru nebo přes <code>tsc --noEmit --watch</code> v samostatném procesu.</p>

<p>Protože Oxc přepisuje soubor bez znalosti typů z ostatních souborů, dokumentace doporučuje zapnout v <code>tsconfig.json</code> volbu <code>isolatedModules</code> a u importů, které slouží jen pro typy, používat <code>import type</code>.</p>

<pre><code class="language-typescript">// tsconfig.json: "isolatedModules": true

import type { User } from './types'

export type { User }
</code></pre>

<h2>SCSS a další preprocesory</h2>
<p>Vite zpracuje <code>.scss</code>, <code>.sass</code>, <code>.less</code> i <code>.styl</code> bez zvláštního pluginu &ndash; stačí doinstalovat samotný preprocesor. Pro Sass a SCSS je to jeden balíček:</p>

<pre><code class="language-bash">npm add -D sass-embedded</code></pre>

<p>Dokumentace zároveň u nových projektů doporučuje spíš nativní CSS proměnné a PostCSS než plný preprocesor; vestavěné SCSS je tu hlavně pro projekty, které ho už mají. Přípona <code>.module.scss</code> spojí preprocesor s CSS moduly.</p>

<h2>Entry pointy a konfigurace</h2>
<p>Vstupním bodem Vite není soubor s JavaScriptem, ale <code>index.html</code>. Vite v něm najde značky <code>&lt;script type="module"&gt;</code> a <code>&lt;link&gt;</code> a odtud sleduje, co všechno do aplikace patří. Víc stránek znamená víc HTML souborů zapsaných do pole <code>input</code> v konfiguraci (viz ukázka výše).</p>

<p>Celé se to ovládá třemi skripty v <code>package.json</code>, které do projektu vloží už zakládací nástroj:</p>

<pre><code class="language-json">{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  }
}
</code></pre>

<p><code>dev</code> spustí vývojový server s HMR, <code>build</code> vyrobí produkční balík a <code>preview</code> ten hotový balík lokálně naservíruje ke kontrole, než se nasadí. Konfigurace přitom bývá pár řádků: u běžného projektu si Vite vystačí s výchozími hodnotami a do <code>vite.config.ts</code> se sahá jen kvůli pluginům, více vstupům nebo úpravě buildu.</p>

<p>Za rychlostí Vite tedy nestojí jeden trik, ale rozdělení práce &ndash; ve vývoji se nebundluje skoro nic a kód jde do prohlížeče tak, jak je, kdežto při buildu se bundluje naplno. Že je to rychlejší než starší celobundlové nástroje, ovšem stojí zatím hlavně na číslech z dokumentace samotného Vite; nezávislé měření tenhle text nepřebírá.</p>

<h2>Zdroje</h2>
<ul>
<li><a href="https://vite.dev/guide/features.html" target="_blank" rel="noopener">Dokumentace Vite &ndash; Features</a>: z ní text bere předzpracování závislostí Rolldownem, chování TypeScriptu (jen přepis, ne kontrola typů), podporu preprocesorů a skripty v <code>package.json</code>.</li>
<li><a href="https://vite.dev/guide/why.html" target="_blank" rel="noopener">Dokumentace Vite &ndash; Why Vite</a>: odtud pochází historie dvojice esbuild a Rollup a jejich sjednocení do Rolldownu ve Vite 8.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules" target="_blank" rel="noopener">MDN &ndash; JavaScript modules</a>: standard nativních ES modulů, na kterých vývojový server stojí.</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-vite-typescript-moderni-build-frontendu-ecaa156e.jpg" length="69527" type="image/jpeg" />
		</item>
		<item>
			<title>Passkey přihlásí uživatele bez hesla dvojicí klíčů vázaných na doménu</title>
			<link>https://tech-blog.chatujme.cz/clanek/passkeys-webauthn-prihlaseni-bez-hesla</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/passkeys-webauthn-prihlaseni-bez-hesla</guid>
			<pubDate>Sun, 09 Aug 2026 08:38:11 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Passkey je přihlašovací údaj, který místo hesla používá dvojici kryptografických klíčů. Soukromý zůstává v zařízení, veřejný putuje na server a sám o sobě je k ničemu. Řídí to standard WebAuthn a klíč přitom patří vždy jen jedné doméně.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-passkeys-webauthn-prihlaseni-bez-hesla-d749b246.jpg" alt="Hardwarový bezpečnostní klíč YubiKey v konektoru USB"><figcaption>Hardwarový klíč je typický roaming autentikátor: soukromý klíč nikdy neopustí čip uvnitř. Foto: Tony Webster, Wikimedia Commons (CC BY 2.0)</figcaption></figure><p>Heslo je sdílené tajemství. Jeden řetězec zná uživatel i&nbsp;server a&nbsp;kdo ho získá, vydává se za&nbsp;majitele účtu. Podle průvodce webauthn.guide stojí za&nbsp;ukradeným nebo slabým heslem 81&nbsp;% průniků spojených s&nbsp;hackingem. Heslo se dá vylákat podvodnou stránkou, vytáhnout z&nbsp;uniklé databáze nebo uhodnout, když ho uživatel použil i&nbsp;jinde.</p><p><strong>Passkey</strong> tenhle model obrací. Místo jednoho tajemství vzniká dvojice klíčů a&nbsp;server nikdy nedostane nic, co by šlo zneužít. Standard, který to řídí, se jmenuje WebAuthn a&nbsp;píše ho W3C společně s&nbsp;aliancí FIDO.</p><h2>Dvojice klíčů místo sdíleného tajemství</h2><p>Passkey stojí na&nbsp;asymetrické kryptografii. Při registraci autentikátor &ndash; čip v&nbsp;telefonu, notebooku nebo v&nbsp;hardwarovém klíči &ndash; vytvoří dvojici matematicky svázaných klíčů. <strong>Soukromý klíč</strong> zůstane bezpečně uložený v&nbsp;zařízení a&nbsp;nikdy ho neopustí. <strong>Veřejný klíč</strong> spolu s&nbsp;náhodným identifikátorem přihlašovacího údaje putuje na&nbsp;server, který si ho uloží k&nbsp;účtu.</p><p>Veřejný klíč není tajný: bez odpovídajícího soukromého klíče se s&nbsp;ním nedá přihlásit. To má dopad na&nbsp;bezpečnost celé databáze. Únik tabulky s&nbsp;veřejnými klíči útočníkovi nepomůže, protože chybí ta druhá polovina páru. Vývojář navíc nemá co hašovat ani solit &ndash; veřejný klíč se ukládá tak, jak přišel.</p><h2>Klíč patří jen jedné doméně</h2><p>Nejdůležitější vlastnost passkey je, že klíč je svázaný s&nbsp;konkrétním původem (origin). Při registraci server uvede pole <code>rp.id</code>, takzvané <em>relying party ID</em> &ndash; identifikátor strany, která uživatele ověřuje. Musí to být doména, na&nbsp;které se stránka právě nachází, nebo její nadřazená doména. Dvojice klíčů vytvořená pro <code>webauthn.guide</code> se nedá použít na&nbsp;<code>evil-webauthn.guide</code>.</p><p>Odtud plyne odolnost vůči phishingu. Když uživatel omylem přistane na&nbsp;podvodné kopii přihlašovací stránky, prohlížeč jednoduše žádný klíč pro cizí doménu nenajde a&nbsp;podpis nevznikne. Autentikátor totiž do&nbsp;podepisovaných dat vkládá skutečný původ stránky; server pak ověří, že sedí s&nbsp;tím jeho. U&nbsp;hesla stačí, aby ho uživatel napsal do&nbsp;falešného pole. U&nbsp;passkey není co napsat a&nbsp;podvodná doména podpis nedostane.</p><h2>Registrace: navigator.credentials.create()</h2><p>Přihlašovací údaj vzniká v&nbsp;prohlížeči voláním <code>navigator.credentials.create()</code>. Server k&nbsp;němu dodá parametry &ndash; hlavně náhodnou <em>výzvu</em> (challenge), která musí mít aspoň 16&nbsp;bajtů a&nbsp;brání přehrání zachycené odpovědi.</p><pre><code class="language-javascript">const publicKeyCredentialCreationOptions = {
  challenge: challengeFromServer,          // &gt;= 16 nahodnych bajtu
  rp: { name: "Moje appka", id: "example.com" },
  user: {
    id: userIdBytes,                       // ne osobni udaj
    name: "lee@example.com",
    displayName: "Lee",
  },
  pubKeyCredParams: [{ alg: -7, type: "public-key" }], // ES256
  authenticatorSelection: { authenticatorAttachment: "platform" },
  timeout: 60000,
  attestation: "none",
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions,
});</code></pre><p>Hodnota <code>alg: -7</code> odkazuje do&nbsp;registru COSE a&nbsp;znamená ECDSA nad křivkou P-256 s&nbsp;hašem SHA-256 &ndash; nejběžnější volba. Pole <code>attestation</code> říká, jak moc server stojí o&nbsp;doklad původu autentikátoru; hodnota <code>none</code> znamená, že se o&nbsp;něj nezajímá, a&nbsp;pro většinu webů je to správně. Výsledný objekt obsahuje veřejný klíč zabalený v&nbsp;<code>response.attestationObject</code> a&nbsp;posílá se na&nbsp;server k&nbsp;uložení.</p><h2>Přihlášení: navigator.credentials.get()</h2><p>Při přihlášení uživatel dokazuje, že soukromý klíč vlastní. Server pošle novou výzvu, prohlídač zavolá <code>navigator.credentials.get()</code> a&nbsp;autentikátor výzvu podepíše &ndash; vznikne <em>assertion</em>, tedy podepsané tvrzení.</p><pre><code class="language-javascript">const publicKeyCredentialRequestOptions = {
  challenge: challengeFromServer,
  allowCredentials: [{
    id: credentialIdBytes,                 // ulozene pri registraci
    type: "public-key",
    transports: ["usb", "ble", "nfc", "internal"],
  }],
  timeout: 60000,
};

const assertion = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions,
});</code></pre><p>Server podpis ověří veřejným klíčem uloženým při registraci. Zkontroluje tři věci: že podepsaná výzva odpovídá té, kterou vydal, že sedí původ stránky a&nbsp;že sedí relying party ID. Když všechno platí, přihlášení je hotové &ndash; a&nbsp;po&nbsp;síti přitom nikdy neproletělo žádné tajemství.</p><h2>Autentikátor v&nbsp;telefonu, nebo na&nbsp;klíčence</h2><p>Autentikátory se dělí na&nbsp;dva druhy a&nbsp;výběr řídí pole <code>authenticatorAttachment</code>:</p><ul><li><strong>Platform</strong> autentikátor je zabudovaný v&nbsp;zařízení &ndash; Windows Hello, Touch ID nebo Face ID. Je po&nbsp;ruce, ale je vázaný na&nbsp;ten konkrétní přístroj.</li><li><strong>Roaming</strong> (v&nbsp;API <code>cross-platform</code>) je přenosný. Typicky hardwarový klíč, který se připojí přes USB, NFC nebo Bluetooth a&nbsp;dá se použít na&nbsp;víc počítačích.</li></ul><p>S&nbsp;tím souvisí ještě jedno dělení. <em>Discoverable</em> přihlašovací údaj (dřív se říkalo resident key) si autentikátor pamatuje celý včetně jména účtu, takže uživatel nemusí zadávat login &ndash; prohlížeč sám nabídne, s&nbsp;kterým účtem se přihlásit. Passkey je z&nbsp;definice vždy discoverable. U&nbsp;non-discoverable údaje se naopak klíč ukládá zašifrovaný na&nbsp;serveru a&nbsp;uživatel musí nejdřív říct, kdo je.</p><h2>Kde do&nbsp;toho zapadá FIDO2</h2><p>WebAuthn není osamocený. Je to browserová část většího celku zvaného <strong>FIDO2</strong>, který tvoří dvě specifikace. WebAuthn od&nbsp;W3C pokrývá API mezi webovou stránkou a&nbsp;prohlížečem. Druhá půlka je <strong>CTAP</strong> (Client to Authenticator Protocol) od&nbsp;aliance FIDO &ndash; protokol mezi prohlížečem a&nbsp;samotným autentikátorem. CTAP řeší, jak si spolu povídá počítač a&nbsp;bezpečnostní klíč nebo telefon.</p><p>Na&nbsp;CTAP stojí i&nbsp;přihlášení napříč zařízeními: passkey z&nbsp;telefonu jde použít při přihlášení na&nbsp;notebooku. Alliance FIDO tomu říká Cross-Device Authentication a&nbsp;jede po&nbsp;přenosu &bdquo;hybrid&ldquo;, který přes Bluetooth Low Energy ověří, že obě zařízení jsou opravdu blízko sebe. Pro vývojáře webu je podstatné, že CTAP implementují prohlížeče a&nbsp;autentikátory, ne server &ndash; ten vidí jen WebAuthn.</p><h2>Ověření na&nbsp;serveru v&nbsp;PHP</h2><p>Klientská část je jen půlka práce. Odpověď autentikátoru musí server rozebrat a&nbsp;ověřit, a&nbsp;to není triviální &ndash; specifikace popisuje u&nbsp;registrace vícebodovou proceduru. V&nbsp;PHP tuhle práci obstará knihovna <strong>web-auth/webauthn-lib</strong> od&nbsp;Spomky-Labs, dostupná i&nbsp;jako balíček pro Symfony.</p><pre><code class="language-bash">composer require web-auth/webauthn-lib</code></pre><p>Nejdřív se sestaví serializer, který převede zakódovaná data z&nbsp;prohlížeče na&nbsp;objekty, a&nbsp;správce podpory attestation. Pro běžný web bez potřeby dokládat model autentikátoru stačí typ <code>none</code>.</p><pre><code class="language-php">&lt;?php

declare(strict_types=1);

use Webauthn\AttestationStatement\AttestationStatementSupportManager;
use Webauthn\AttestationStatement\NoneAttestationStatementSupport;
use Webauthn\Denormalizer\WebauthnSerializerFactory;

$attestationManager = AttestationStatementSupportManager::create();
$attestationManager-&gt;add(NoneAttestationStatementSupport::create());

$serializer = (new WebauthnSerializerFactory($attestationManager))-&gt;create();</code></pre><p>Vlastní kontrolu obstarají dva validátory &ndash; jeden pro registraci (attestation), druhý pro přihlášení (assertion). Oba dostanou takzvaný Ceremony Step Manager, který v&nbsp;sobě nese jednotlivé ověřovací kroky.</p><pre><code class="language-php">&lt;?php

use Webauthn\AuthenticatorAssertionResponseValidator;
use Webauthn\AuthenticatorAttestationResponseValidator;
use Webauthn\CeremonyStep\CeremonyStepManagerFactory;

$csmFactory = new CeremonyStepManagerFactory();

$attestationValidator = AuthenticatorAttestationResponseValidator::create(
    $csmFactory-&gt;creationCeremony()
);
$assertionValidator = AuthenticatorAssertionResponseValidator::create(
    $csmFactory-&gt;requestCeremony()
);</code></pre><p>Validátor pak nad přijatou odpovědí ověří podpis, výzvu, původ i&nbsp;relying party ID a&nbsp;vrátí záznam přihlašovacího údaje k&nbsp;uložení. Tím se kruh uzavírá: klíč vytvořený v&nbsp;prohlížeči má na&nbsp;serveru protějšek, který ho umí zkontrolovat, aniž by kdy potřeboval znát nějaké heslo.</p><h2>Zdroje</h2><ul><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API" target="_blank" rel="noopener">MDN: Web Authentication API</a> &ndash; průběh registrace a&nbsp;přihlášení, discoverable klíče, platform vs. roaming autentikátor.</li><li><a href="https://webauthn.guide/" target="_blank" rel="noopener">webauthn.guide</a> &ndash; vázání klíče na&nbsp;doménu, ukázky volání create() a&nbsp;get(), údaj o&nbsp;81&nbsp;% průniků přes hesla.</li><li><a href="https://fidoalliance.org/fido2/" target="_blank" rel="noopener">FIDO Alliance: FIDO2</a> &ndash; že FIDO2 tvoří WebAuthn a&nbsp;CTAP a&nbsp;jak funguje přihlášení napříč zařízeními.</li><li><a href="https://webauthn-doc.spomky-labs.com/" target="_blank" rel="noopener">web-auth/webauthn-lib</a> &ndash; serializer, správce attestation a&nbsp;oba validátory pro ověření odpovědi v&nbsp;PHP.</li></ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-passkeys-webauthn-prihlaseni-bez-hesla-d749b246.jpg" length="74394" type="image/jpeg" />
		</item>
		<item>
			<title>Nette skládá závislosti tříd za vás pomocí dependency injection a autowiringu</title>
			<link>https://tech-blog.chatujme.cz/clanek/nette-dependency-injection-polopate</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/nette-dependency-injection-polopate</guid>
			<pubDate>Sun, 09 Aug 2026 08:38:11 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Dependency injection zní odborně, ale je to jen předání parametrů: co třída potřebuje, dostane zvenčí místo aby si to sháněla sama. Text ukazuje konstruktor injection, DI kontejner, autowiring v souboru NEON i generované továrny Nette &ndash; a proč se pak kód líp testuje.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-nette-dependency-injection-polopate-0d41651e.jpg" alt="Zdrojový kód na obrazovce monitoru"><figcaption>Kód na obrazovce. Foto: Sai Kiran Anagani, Wikimedia Commons (CC0)</figcaption></figure>

<p>Každý objekt v&nbsp;aplikaci něco potřebuje: úložiště článků potřebuje databázi, odesílač pošty připojení k&nbsp;SMTP, kontroler potřebuje obojí. Otázka je, odkud si to má vzít. Špatná odpověď zní, že si to objekt obstará sám &ndash; zavolá globální funkci, sáhne na singleton nebo si spojení vyrobí uvnitř metody. Tím vznikne skrytá vazba, kterou z&nbsp;hlavičky třídy nikdo nepozná.</p>

<pre><code class="language-php">class ArticleRepository
{
    public function save(Article $article): void
    {
        $db = Database::getInstance();  // skryta vazba na globalni stav
        $db-&gt;query('INSERT INTO articles ...', $article);
    }
}</code></pre>

<p>Kdo tuhle třídu čte, netuší, do jaké databáze se ukládá ani jak ji vyměnit. Dependency injection je na to jednoduchá odpověď: co třída potřebuje, to jí předáte zvenčí jako parametr. <a href="https://doc.nette.org/en/dependency-injection/introduction" target="_blank" rel="noopener">Úvodní kapitola dokumentace Nette</a> to shrnuje do jednoho pravidla &ndash; ať je vám to podáno. Žádná magie, jen předání argumentů.</p>

<p>Hned na začátku je dobré nesplést si dva pojmy. <strong>Dependency injection</strong> je návrhový vzor, tedy způsob, jak psát kód. <strong>DI kontejner</strong> je nástroj, který to předávání za vás obstará. Jedno jde použít bez druhého: injektovat závislosti můžete i&nbsp;bez kontejneru, ručním předáním v&nbsp;konstruktoru.</p>

<h2>Závislost je jen parametr</h2>

<p>Nejběžnější způsob předání je přes konstruktor. Hodí se pro závislosti, bez kterých objekt nemá smysl &ndash; když je nedostane, nedá se vůbec sestavit. Od PHP&nbsp;8.0 se dá zkrátit takzvanou promocí parametrů, kdy se vlastnost deklaruje rovnou v&nbsp;hlavičce konstruktoru, a&nbsp;od PHP&nbsp;8.1 ji jde označit jako <code>readonly</code>, aby se po sestavení už neměnila.</p>

<pre><code class="language-php">class ArticleRepository
{
    public function __construct(
        private readonly Nette\Database\Explorer $db,
    ) {
    }

    public function save(Article $article): void
    {
        $this-&gt;db-&gt;table('articles')-&gt;insert([
            'title' =&gt; $article-&gt;title,
        ]);
    }
}</code></pre>

<p>Teď je z&nbsp;hlavičky vidět všechno: třída potřebuje databázi a&nbsp;dostane ji zvenčí. Kdo ji použije, ji taky sestaví, a&nbsp;při tom rozhodne, kterou databázi dostane. Vedle konstruktoru zná Nette i&nbsp;předání přes setter (metoda <code>set*()</code>) pro nepovinné závislosti a&nbsp;zápis přímo do veřejné vlastnosti; ten se ale nedoporučuje, protože vlastnost musí být veřejná a&nbsp;stává se součástí rozhraní třídy.</p>

<h2>Od ručního skládání ke kontejneru</h2>

<p>Předávat parametry je hezké, dokud jich je málo. Jenže úložiště potřebuje databázi, ta potřebuje spojení, kontroler potřebuje úložiště &ndash; a&nbsp;než sestavíte jeden objekt, musíte ručně poskládat celý řetěz pod ním:</p>

<pre><code class="language-php">$controller = new EditController(
    new ArticleFactory(
        new Nette\Database\Connection($dsn, $user, $password),
    ),
);</code></pre>

<p>Přesně tuhle práci dělá DI kontejner. Je to objekt, který umí vytvořit a&nbsp;nastavit ostatní objekty &ndash; v&nbsp;terminologii Nette se jim říká <em>služby</em>. Poprosíte ho o&nbsp;výsledný objekt a&nbsp;on si sám dohledá, co k&nbsp;jeho sestavení potřebuje. Aby přitom nevznikala pokaždé nová databáze, drží už vytvořené služby stranou a&nbsp;podruhé vrátí tutéž. <a href="https://doc.nette.org/en/dependency-injection/container" target="_blank" rel="noopener">Dokumentace to ukazuje</a> na kontejneru napsaném ručně; skutečný kontejner v&nbsp;Nette (balíček <code>nette/di</code>, řada&nbsp;3) si ale kód generuje a&nbsp;aktualizuje sám, takže ho nikdo nepíše ani neudržuje.</p>

<h2>Autowiring hledá závislost podle typu</h2>

<p>Služby se popisují v&nbsp;konfiguraci ve formátu <a href="https://ne-on.org/" target="_blank" rel="noopener">NEON</a>, což je čitelný textový formát podobný YAMLu. Bez další pomoci byste u&nbsp;každé služby museli vypsat všechny její závislosti:</p>

<pre><code class="language-neon">services:
    articles: App\Model\ArticleRepository(@database, @cache.storage)</code></pre>

<p>To je práce, kterou umí odvodit stroj. Slouží k&nbsp;tomu autowiring: podívá se na typy parametrů konstruktoru a&nbsp;dosadí odpovídající službu sám. Zápis se pak scvrkne na jméno třídy:</p>

<pre><code class="language-neon">services:
    - App\Model\ArticleRepository
    - App\Model\ArticleFactory</code></pre>

<p>Podstatné je, čím se autowiring řídí: <strong>výhradně typy</strong>, nikdy jmény služeb. Ví proto i&nbsp;o&nbsp;tom, že třída splňuje rozhraní, která implementuje, a&nbsp;třídy, ze kterých dědí. Jméno služby je jen pomocný štítek a&nbsp;jeho přejmenování nic nerozbije.</p>

<p>Má to jednu podmínku: každý typ smí být v&nbsp;kontejneru právě jednou. Kdyby byly dvě služby téhož typu, autowiring by nevěděl, kterou podat, a&nbsp;vyhodí výjimku. Řeší se to buď vyřazením jedné služby z&nbsp;autowiringu (<code>autowired: false</code>), nebo upřednostněním jedné z&nbsp;nich:</p>

<pre><code class="language-neon">services:
    mainDb: PDO(%dsn%, %user%, %password%)
    tempDb:
        create: PDO('sqlite::memory:')
        autowired: false           # tempDb je z autowiringu vyrazena
    articles: App\Model\ArticleRepository   # do konstruktoru tedy dostane mainDb</code></pre>

<h2>Továrny, které Nette dopíše samo</h2>

<p>Kontejner drží službu jako jeden sdílený kus. Někdy ale potřebujete vyrábět nové objekty za běhu &ndash; třeba nový článek pokaždé, když ho někdo napíše. K&nbsp;tomu slouží továrna: objekt, který jiné objekty vytváří a&nbsp;dodává jim jejich závislosti. V&nbsp;Nette ji nemusíte psát. Stačí rozhraní s&nbsp;jedinou metodou <code>create()</code> a&nbsp;deklarovaným návratovým typem a&nbsp;implementaci dopíše Nette DI za vás:</p>

<pre><code class="language-php">interface ArticleFactory
{
    function create(): Article;
}</code></pre>

<pre><code class="language-neon">services:
    - ArticleFactory</code></pre>

<p>V&nbsp;kódu si pak vyžádáte objekt podle rozhraní a&nbsp;zavoláte <code>create()</code>. Když metoda přijme parametr, předá ho továrna do konstruktoru &ndash; podmínkou je, že se parametr jmenuje stejně jako parametr konstruktoru, podle čehož si je Nette spáruje.</p>

<pre><code class="language-php">class EditController
{
    public function __construct(
        private ArticleFactory $articleFactory,
    ) {
    }

    public function add(): void
    {
        $article = $this-&gt;articleFactory-&gt;create();
    }
}</code></pre>

<h2>Proč se to testuje líp</h2>

<p>Výhoda, kterou injektování přináší zadarmo, se ukáže až u&nbsp;testů. Když třída dostává databázi zvenčí, můžete jí v&nbsp;testu místo ostré databáze podat náhradu &ndash; třeba SQLite v&nbsp;paměti nebo prázdnou atrapu &ndash; a&nbsp;sestavit ji přímo, bez kontejneru:</p>

<pre><code class="language-php">$repository = new ArticleRepository($fakeDb);
$repository-&gt;save($article);
// zadna ostra databaze, zadny globalni stav k prepsani</code></pre>

<p>U&nbsp;té první, skryté verze to nešlo: <code>Database::getInstance()</code> uvnitř metody se v&nbsp;testu těžko obchází, protože sáhne na globální stav, který test neřídí. Úvodní kapitola dokumentace na to míří stejnou otázkou &ndash; do jaké databáze vlastně skrytý objekt ukládá, do ostré, nebo testovací, a&nbsp;jak se to změní. S&nbsp;injektováním je odpověď v&nbsp;hlavičce třídy a&nbsp;test si dosadí, co potřebuje.</p>

<p>Kontejner tedy není to hlavní. Hlavní je pravidlo, že si objekt závislost nebere sám, ale dostane ji podanou. Kontejner to jen zautomatizuje ve chvíli, kdy objektů přibude natolik, že by je ruční skládání pohřbilo.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://doc.nette.org/en/dependency-injection/introduction" target="_blank" rel="noopener">Nette: What is Dependency Injection?</a> &ndash; pravidlo „ať je vám to podáno“ a&nbsp;rozdíl mezi vzorem a&nbsp;kontejnerem.</li>
<li><a href="https://doc.nette.org/en/dependency-injection/passing-dependencies" target="_blank" rel="noopener">Nette: Passing Dependencies</a> &ndash; konstruktor, setter a&nbsp;property injection včetně promoce parametrů a&nbsp;<code>readonly</code>.</li>
<li><a href="https://doc.nette.org/en/dependency-injection/autowiring" target="_blank" rel="noopener">Nette: Autowiring</a> &ndash; řízení podle typů, podmínka jedné služby na typ a&nbsp;<code>autowired: false</code>.</li>
<li><a href="https://doc.nette.org/en/dependency-injection/factory" target="_blank" rel="noopener">Nette: Generated Factories</a> &ndash; generování továrny z&nbsp;rozhraní s&nbsp;jednou metodou <code>create()</code>.</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-nette-dependency-injection-polopate-0d41651e.jpg" length="56987" type="image/jpeg" />
		</item>
		<item>
			<title>Shadow 4.20 zrušil minimální dobu platnosti hesla a označil ji za zranitelnost</title>
			<link>https://tech-blog.chatujme.cz/clanek/shadow-4-20-minimalni-doba-platnosti-hesla</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/shadow-4-20-minimalni-doba-platnosti-hesla</guid>
			<pubDate>Sat, 08 Aug 2026 01:48:59 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Balík shadow, ze kterého na Linuxu pocházejí příkazy passwd, chage nebo useradd, vyšel 29. července ve verzi 4.20.0. Zmizel z něj příkaz expiry, přepínače pro minimální dobu mezi dvěma změnami hesla i nástroje groupmems a logoutd. Právě u minimální doby napsal správce projektu, že jde o zranitelnost a náhradu nedostane.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/m2-2026-08-08-shadow-utils-bae6c97d.jpg" alt="Okno terminálu GNOME s výpisem příkazů ls a uname -a"><figcaption>Nástroje z&nbsp;balíku shadow se ovládají z&nbsp;příkazové řádky. Na snímku je okno terminálu GNOME s&nbsp;výpisem příkazu uname -a. Foto: xmodulo, Flickr (CC BY 2.0)</figcaption></figure>

<p>Balík shadow drží na linuxových systémech soubory <code>/etc/passwd</code> a&nbsp;<code>/etc/shadow</code> a&nbsp;patří k&nbsp;němu příkazy <code>passwd</code>, <code>chage</code>, <code>useradd</code> nebo <code>su</code>. Verze 4.20.0 s&nbsp;přezdívkou Ibores vyšla 29.&nbsp;července 2026 a&nbsp;zajímavá je hlavně tím, co v&nbsp;ní není.</p>

<h2>Co ve vydání skončilo</h2>

<p>Odstraněné věci byly ohlášené jako zastaralé už ve vydání 4.19 z&nbsp;prosince 2025, některé dřív. Podle <a href="https://github.com/shadow-maint/shadow/releases/tag/4.20.0" rel="noopener">poznámek k&nbsp;vydání</a> zmizely:</p>

<ul>
<li>příkaz <code>expiry(1)</code>, kterým si uživatel mohl nechat zkontrolovat platnost vlastního hesla,</li>
<li>minimální doba mezi dvěma změnami hesla, a&nbsp;to najednou v&nbsp;pěti podobách: přepínač <code>chage -m</code> včetně interaktivní verze, <code>passwd -n</code>, proměnná <code>PASS_MIN_DAYS</code> v&nbsp;souboru <code>login.defs</code> a&nbsp;pole <code>sp_min</code> v&nbsp;<code>/etc/shadow</code>, které se nově ignoruje a&nbsp;maže,</li>
<li>nástroj <code>groupmems(8)</code> na správu členství ve skupině, který má nahradit <code>usermod(8)</code>,</li>
<li>démon <code>logoutd(8)</code>, který odhlašoval uživatele mimo povolené hodiny,</li>
<li>překonané způsoby hašování hesel: hodnoty DES a&nbsp;MD5 u&nbsp;proměnné <code>ENCRYPT_METHOD</code> a&nbsp;proměnná <code>MD5_CRYPT_ENAB</code>.</li>
</ul>

<p>Programy nově skončí chybou, když jim některý z&nbsp;odstraněných přepínačů nebo některou z&nbsp;proměnných podstrčíte. Poznámky k&nbsp;vydání to označují za záměr: má to pomoct najít skripty, které na nich stojí.</p>

<h2>Dolní mez odešla proto, že ji nikdo nepředepisuje</h2>

<p>Stárnutí hesel míří v&nbsp;projektu k&nbsp;úplnému konci. Návrh, který ho označil za zastaralé, se jmenuje rovnou <a href="https://github.com/shadow-maint/shadow/pull/1432" rel="noopener">Remove password aging</a> a&nbsp;jeho autor Alejandro Colomar v&nbsp;něm napsal, že hesla by nikdy neměla vypršet a&nbsp;že je doloženo, jak tím bezpečnost hesel klesá (citace přeložena z&nbsp;angličtiny). Návrh na odstranění zbytku je pořád otevřený a&nbsp;autor si do něj poznamenal, že chce vyčkat asi rok, než se ve světě usadí následky téhle změny.</p>

<p>Proč šla jako první dolní mez, a&nbsp;ne horní, stojí v&nbsp;<a href="https://github.com/shadow-maint/shadow/pull/1482" rel="noopener">návrhu na odstranění pole sp_min</a>: minimální doba mezi změnami hesla podle něj nevypadá, že by ji něco regulovalo, takže ji šlo odstranit hned. Poznámky k&nbsp;vydání jsou k&nbsp;ní tvrdší, píše se v&nbsp;nich, že se ta možnost považuje za zranitelnost a&nbsp;náhradu nedostane.</p>

<p>Obě meze přitom dělají něco jiného. Horní hranice, tedy <code>PASS_MAX_DAYS</code>, je ta, která uživatele každých pár měsíců nutí vymýšlet nové heslo. Právě tu americký NIST ve <a href="https://pages.nist.gov/800-63-4/sp800-63b.html" rel="noopener">čtvrté revizi doporučení SP 800-63B</a> zakazuje: ověřovatel nesmí po uživateli chtít, aby si heslo měnil pravidelně, a&nbsp;smí ho k&nbsp;tomu donutit jen tehdy, když má doklad o&nbsp;kompromitaci. Dolní mez naopak brání tomu, aby si uživatel po vynucené změně hned nastavil zpátky to staré. O&nbsp;ní se v&nbsp;tom doporučení nepíše.</p>

<p>V&nbsp;samotné verzi 4.20.0 horní mez zůstává, jen se z&nbsp;výchozího souboru <code>login.defs</code> vytratily předvyplněné hodnoty <code>PASS_MAX_DAYS</code> a&nbsp;<code>PASS_WARN_AGE</code>. Spolu s&nbsp;nimi jsou dál označené za zastaralé přepínače <code>chage -M</code>, <code>-W</code> a&nbsp;<code>-I</code> a&nbsp;jejich protějšky v&nbsp;<code>passwd</code>, <code>useradd</code> a&nbsp;<code>usermod</code>.</p>

<h2>Výchozím hašováním je SHA512</h2>

<p>Druhá velká změna se týká toho, čím se heslo v&nbsp;systému uloží. Podpora SHA256 a&nbsp;SHA512 byla dosud volitelná, ve verzi 4.20.0 je bezpodmínečná, a&nbsp;výchozí hodnota <code>ENCRYPT_METHOD</code> se posunula z&nbsp;DES na SHA512. Projekt k&nbsp;tomu dodává, že si správci mají metodu stejně napsat do konfigurace výslovně, protože jiné programy, které <code>login.defs</code> čtou, můžou pořád vycházet z&nbsp;DES.</p>

<h2>Dvě regrese, které tam zůstanou</h2>

<p>Poznámky k&nbsp;vydání mají vlastní oddíl na dvě chyby, které vznikly jako vedlejší účinek oprav a&nbsp;se kterými se podle projektu musí uživatelé srovnat. První se týká <code>su(1)</code>: pouštět ho jako root je kvůli volání <code>ioctl</code> zvanému <code>TIOCSTI</code> nebezpečné, a&nbsp;když to volání nejde zakázat, <code>su</code> nově skončí chybou. Uživatel, který na to narazil, dostal místo přihlášení hlášku o&nbsp;tom, že shell neumí nastavit procesovou skupinu terminálu, a&nbsp;<a href="https://github.com/shadow-maint/shadow/issues/1704" rel="noopener">jeho hlášení z&nbsp;30.&nbsp;července</a> je pořád otevřené.</p>

<p>Druhá se týká <code>usermod(8)</code>: když se mu nepodaří odemknout heslo, protože žádné neexistuje, neudělá teď nic. Dřív to byla jen výstraha a&nbsp;příkaz proběhl. Z&nbsp;balíku navíc vypadla nepoužívaná závislost na knihovně libattr.</p>

<h2>Kdy to dorazí k&nbsp;uživatelům</h2>

<p>Rychlé distribuce jsou u&nbsp;toho hned. Arch Linux má <a href="https://archlinux.org/packages/core/x86_64/shadow/" rel="noopener">balík shadow ve verzi 4.20.0</a> v&nbsp;repozitáři core od 31.&nbsp;července 2026. Debian je jinde: podle <a href="https://sources.debian.org/src/shadow/" rel="noopener">jeho vlastního přehledu zdrojových balíků</a> mají 8.&nbsp;srpna 2026 vývojové větve sid i&nbsp;forky verzi 4.19.3, stabilní trixie 4.17.4 a&nbsp;bookworm dokonce 4.13.</p>

<p>Kdo tedy o&nbsp;odstraněné přepínače zakopne, pozná to nejdřív na domácím nebo vývojářském stroji. Návrh na odstranění zbytku stárnutí hesel prosí distribuce, ať trojici <code>PASS_MIN_DAYS</code>, <code>PASS_MAX_DAYS</code> a&nbsp;<code>PASS_WARN_AGE</code> vyházejí ze svých souborů <code>login.defs</code> co nejdřív: až vyjde 4.21, programy s&nbsp;takovou konfigurací skončí chybou.</p>

<p>Pro správce z&nbsp;toho plyne konkrétní úklid. Projít skripty a&nbsp;konfigurační management, jestli někde nevolají <code>chage -m</code>, <code>passwd -n</code>, <code>expiry</code>, <code>groupmems</code> nebo <code>logoutd</code>, a&nbsp;podívat se do <code>login.defs</code> na <code>PASS_MIN_DAYS</code>. Chybová hláška místo tichého ignorování je v&nbsp;tomhle případě dobrá zpráva, protože se ta místa ozvou sama.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://github.com/shadow-maint/shadow/releases/tag/4.20.0" rel="noopener">shadow-4.20.0 (Ibores)</a>, poznámky k&nbsp;vydání projektu shadow, 29.&nbsp;července 2026</li>
<li><a href="https://github.com/shadow-maint/shadow/pull/1432" rel="noopener">Remove password aging</a>, otevřený návrh v&nbsp;repozitáři shadow-maint/shadow</li>
<li><a href="https://github.com/shadow-maint/shadow/pull/1482" rel="noopener">Remove support for shadow(5)'s sp_min</a>, návrh začleněný 11.&nbsp;července 2026</li>
<li><a href="https://github.com/shadow-maint/shadow/issues/1343" rel="noopener">Deprecate and remove the groupmems utility</a>, hlášení z&nbsp;25.&nbsp;srpna 2025</li>
<li><a href="https://pages.nist.gov/800-63-4/sp800-63b.html" rel="noopener">NIST SP 800-63B, Digital Identity Guidelines</a>, čtvrtá revize</li>
<li><a href="https://archlinux.org/packages/core/x86_64/shadow/" rel="noopener">shadow 4.20.0.arch1-1</a>, repozitář core Arch Linuxu</li>
<li><a href="https://sources.debian.org/src/shadow/" rel="noopener">shadow</a>, přehled verzí zdrojového balíku v&nbsp;Debianu</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/m2-2026-08-08-shadow-utils-bae6c97d.jpg" length="39722" type="image/jpeg" />
		</item>
		<item>
			<title>Rust zapnul nový borrow checker v kanálu nightly, stabilizovat ho chce do konce roku</title>
			<link>https://tech-blog.chatujme.cz/clanek/rust-polonius-alpha-nightly</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/rust-polonius-alpha-nightly</guid>
			<pubDate>Thu, 06 Aug 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Nová podoba borrow checkeru Rustu jménem Polonius Alpha je od 6. srpna v kanálu nightly. Přijme kód, který dosavadní kontrola odmítala, protože nově sleduje tok programu; část projektů za to zaplatí delším překladem. Do stabilního vydání se má dostat do konce roku.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-rust-polonius-alpha-nightly-59547e32.jpg" alt="Nafukovací maskot Rustu Ferris na stánku projektu"><figcaption>Nafukovací Ferris, maskot Rustu, na&nbsp;stánku projektu na&nbsp;konferenci 38C3. Foto: Igloo22225, Wikimedia Commons (CC BY 4.0)</figcaption></figure>

<p>Jack Huey za&nbsp;skupinu, která na&nbsp;Poloniu pracuje, <a href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nightly/" target="_blank" rel="noopener">oznámil 4.&nbsp;srpna</a>, že se do&nbsp;nočních sestavení Rustu zapíná nová podoba borrow checkeru. Příspěvek o&nbsp;tom píše v&nbsp;přítomném čase, samotná úprava se ale do&nbsp;repozitáře dostala až <a href="https://github.com/rust-lang/rust/pull/159343" target="_blank" rel="noopener">o&nbsp;den později</a>, 5.&nbsp;srpna ve&nbsp;21:37 světového času. První nightly, které ji nese, je tedy až to ze&nbsp;6.&nbsp;srpna: jeho manifest uvádí verzi 1.99.0-nightly (7608eb7b0 2026-08-05) a&nbsp;<code>7608eb7b0</code> je právě commit, kterým se ta změna slučovala.</p>

<h2>Kontrola, která sleduje tok programu</h2>

<p>Borrow checker je část překladače, která hlídá půjčené odkazy – že odkaz nepřežije data, na&nbsp;která ukazuje, a&nbsp;že vedle měnitelného odkazu neexistuje druhý. Dnešní stabilní podoba se jmenuje NLL a&nbsp;v&nbsp;Rustu je od&nbsp;roku 2019, kdy nahradila úplně první a&nbsp;hodně omezenou implementaci; její přechodový režim, který zůstal jen kvůli hezčím chybovým hláškám, zmizel v&nbsp;roce 2022.</p>

<p>Polonius Alpha přidává jedinou schopnost, zato podstatnou: vztahy mezi životnostmi posuzuje podle toho, kudy program teče. NLL je v&nbsp;tomhle slepé a&nbsp;dívá se na&nbsp;funkci jako na&nbsp;celek. Nejmenší příklad, na&nbsp;kterém je rozdíl vidět, uvádí oznámení takhle:</p>

<pre><code class="language-rust">fn reborrow(a: &amp;mut u8) -&gt; &amp;mut u8 {
    let b = &amp;mut *a;
    if true { b } else { a }
}</code></pre>

<p>Praktičtější případ je funkce, která z&nbsp;<code>HashMap</code> vrátí měnitelný odkaz na&nbsp;hodnotu a&nbsp;chybějící klíč nejdřív doplní. NLL usoudí, že půjčka vzniklá voláním <code>map.get_mut</code> žije po&nbsp;celou funkci, protože tak vypadá návratový typ – a&nbsp;tvrdí to i&nbsp;o&nbsp;větvi, kde se žádná hodnota nenašla a&nbsp;kde se do&nbsp;mapy vzápětí zapisuje. Právě proto ten zápis odmítne. Polonius Alpha pozná, že v&nbsp;téhle větvi už půjčka živá není, a&nbsp;kód přeloží.</p>

<h2>Se starým Poloniem se nepřekrývá úplně</h2>

<p>Jméno Polonius nesl už rozbor, který se od&nbsp;prací na&nbsp;NLL odštěpil v&nbsp;roce 2018. Ten prošel celou testovací sadou NLL a&nbsp;přijímal i&nbsp;kód, který NLL nepřijme, jenže byl pomalý – u&nbsp;některých programů natolik, že s&nbsp;ním podle oznámení nešlo počítat. Roky pokusů o&nbsp;rychlejší implementaci téhož zadání k&nbsp;ničemu nevedly. Až v&nbsp;roce 2023 vznikla jiná formulace, která staví na&nbsp;stávající infrastruktuře NLL a&nbsp;vyžaduje jen malou přestavbu; stabilizovat se měla původně už v&nbsp;roce 2024.</p>

<p>Slovo Alpha v&nbsp;názvu má svůj důvod. Některé programy, které starý Polonius přeložil, nová podoba odmítne; oznámení ukazuje cyklus <code>while let</code>, který si uvnitř přepůjčuje odkaz do&nbsp;dalšího prvku spojového seznamu. Platí to i&nbsp;obráceně, takže ani jedno není podmnožinou druhého.</p>

<h2>Za přijatý kód se platí časem překladu</h2>

<p>Polonius Alpha dělá vždy stejně práce jako NLL, nebo víc; méně nikdy. <a href="https://github.com/rust-lang/compiler-team/issues/1015" target="_blank" rel="noopener">Návrh změny</a>, který compiler team přijal 25.&nbsp;července, uvádí v&nbsp;měřicí sadě překladače průměrné zpomalení kolem 2&nbsp;%. Z&nbsp;deseti tisíc nejstahovanějších crate jich 91 překročilo práh 2&nbsp;% při celé kompilaci i&nbsp;se závislostmi a&nbsp;z&nbsp;pěti tisíc nejstahovanějších jich 61 překročilo práh 1&nbsp;%, když se měřil jen samotný crate bez závislostí.</p>

<p>Ta dvě čísla se v&nbsp;oznámení na&nbsp;blogu slévají do&nbsp;jednoho: ukazuje jediný graf, mluví u&nbsp;něj o&nbsp;deseti tisících crate i&nbsp;o&nbsp;prahu 1&nbsp;% a&nbsp;měřený čas u&nbsp;něj popisuje jako čas samotného crate bez závislostí. Návrh takovou dvojici nemá – vzorek pěti tisíc a&nbsp;vzorek deseti tisíc jsou v&nbsp;něm dvě různá měření s&nbsp;různým prahem.</p>

<p>Nejhorší zpomalení uvnitř první desetitisícovky je podle návrhu kolem 20&nbsp;%. Mimo ni se tým díval hlavně na&nbsp;projekty s&nbsp;velkým počtem půjček a&nbsp;našel i&nbsp;horší případy: sestavovací skript jednoho z&nbsp;nich se překládá dvakrát až třikrát déle. Autoři to považují za&nbsp;přijatelné i&nbsp;v&nbsp;případě, že se to opravit nepodaří, protože jde o&nbsp;vzácné a&nbsp;povětšinou malé zpomalení; část příčin už prošla tříděním a&nbsp;na&nbsp;zmírnění se pracuje. Pro&nbsp;představu, o&nbsp;jaká čísla u&nbsp;rychlosti překladu jde: <a href="/clanek/rustc-vykon-cervenec-2026">za předchozích osm měsíců rustc zrychlil o&nbsp;5,6&nbsp;%</a>. Obě čísla ale pocházejí z&nbsp;jiných měření, takže se od&nbsp;sebe odečítat nedají.</p>

<h2>Zapíná se při stavbě překladače, ne za&nbsp;běhu</h2>

<p>Přepínač <code>-Zpolonius</code> v&nbsp;rustc existuje léta. Nové je to, čím se přepnula jeho výchozí hodnota: sestavovací skript nastaví proměnnou <code>CFG_DEFAULT_POLONIUS_NEXT</code> jen tehdy, když se překladač staví v&nbsp;kanálu <code>nightly</code> nebo <code>dev</code>. Beta ani stabilní vydání ji nedostanou a&nbsp;výchozí hodnota tam zůstává vypnutá.</p>

<p>Kdo o&nbsp;novou kontrolu na&nbsp;nightly nestojí, předá překladači <code>-Zpolonius=off</code>, ať už přímo, přes proměnnou <code>RUSTFLAGS</code>, nebo v&nbsp;souboru <code>.cargo/config.toml</code>. Pozor na&nbsp;jednu past: <code>-Zpolonius</code> bez hodnoty znamená <code>legacy</code>, tedy tu starou pomalou implementaci z&nbsp;roku 2018, ne novou. Přijímané hodnoty jsou <code>legacy</code>, <code>off</code> a&nbsp;<code>next</code>, jak stojí ve&nbsp;zdrojovém kódu rustc.</p>

<h2>Kdy to bude ve&nbsp;stabilním Rustu</h2>

<p>Projekt chce Polonius Alpha nechat na&nbsp;nightly zapnutý až do&nbsp;stabilizace a&nbsp;počítá s&nbsp;ní ještě letos. Do&nbsp;té doby sbírá hlášení o&nbsp;výkonnostních propadech, o&nbsp;nesprávně přijatém kódu a&nbsp;o&nbsp;podivných chybových hláškách; u&nbsp;posledního bodu oznámení dodává, že žádnou změnu proti NLL zatím nezaznamenali. Kdyby se něco vážného ukázalo, na&nbsp;nightly se kontrola zase vypne.</p>

<p>Po&nbsp;stabilizaci má vývoj Polonia utichnout. Optimalizovat a&nbsp;dolaďovat výkon se ještě chvíli bude, ale na&nbsp;další schopnosti – tedy na&nbsp;programy, které nepřeloží ani Alpha, ani NLL – se podle oznámení zatím nikdo nechystá. Projekt to zdůvodňuje tím, že Alpha řeší většinu případů, na&nbsp;které lidé v&nbsp;praxi narážejí, a&nbsp;že jsou přednější jiné věci.</p>

<p>Zdroje: <a href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nightly/" target="_blank" rel="noopener">oznámení na&nbsp;blogu Rustu</a>, <a href="https://github.com/rust-lang/compiler-team/issues/1015" target="_blank" rel="noopener">návrh změny v&nbsp;repozitáři compiler teamu</a>, <a href="https://github.com/rust-lang/rust/pull/159343" target="_blank" rel="noopener">sloučená úprava rust-lang/rust</a> a&nbsp;<a href="https://static.rust-lang.org/dist/2026-08-06/channel-rust-nightly.toml" target="_blank" rel="noopener">manifest kanálu nightly ze&nbsp;6.&nbsp;srpna 2026</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-rust-polonius-alpha-nightly-59547e32.jpg" length="142178" type="image/jpeg" />
		</item>
		<item>
			<title>Rustový frontend gccrs udělal krok k překladu linuxového jádra přes GCC</title>
			<link>https://tech-blog.chatujme.cz/clanek/gccrs-linuxove-jadro-rust-gcc</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/gccrs-linuxove-jadro-rust-gcc</guid>
			<pubDate>Tue, 04 Aug 2026 02:06:10 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Projekt gccrs staví alternativní rustový překladač pro GCC a první polovinu roku 2026 věnoval testování na kódu linuxového jádra. Odhalilo to chyby ve zpracování jmenných prostorů, destruktorů i metadat balíčků, které tým postupně opravil. Klíčové části potřebné ke spuštění jádra – makra, rozhraní uapi i hlavní soubory – byly podle vlastního přehledu projektu v květnu pořád na nule procent.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/m2-2026-08-04-gccrs-rust-logo-b4329123.png" alt="Logo programovacího jazyka Rust"><figcaption>Logo jazyka Rust. Foto: Looobay, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Linuxové jádro umí od roku 2022 přijímat kód napsaný v&nbsp;Rustu, jeho překlad ale zajišťuje výhradně rustc, oficiální kompilátor založený na LLVM. Projekt <a href="https://github.com/Rust-GCC/gccrs" rel="noopener">gccrs</a> od roku 2020 staví alternativu – rustový frontend přímo pro GCC. Podle shrnutí na <a href="https://lwn.net/SubscriberLink/1083202/f1ba926cd57ac5c5/" rel="noopener">LWN.net</a> a&nbsp;vlastních měsíčních zpráv věnoval tým první polovinu roku 2026 právě tomu, aby jím šlo přeložit rustové části jádra, a&nbsp;cestou odhalil a&nbsp;opravil několik zásadních chyb ve zpracování jmen, destruktorů i&nbsp;metadat.</p>

<h2>Proč vedle LLVM ještě GCC</h2>
<p>Rust v&nbsp;jádře dnes běží výhradně přes rustc s&nbsp;LLVM backendem – experimentální podpora GCC jako backendu přes rust_codegen_gcc existuje, ale samotný frontend zůstává rustc. LLVM ale nepokrývá všechny architektury, které umí GCC, a&nbsp;nedává přístup do jeho pluginového ekosystému. S&nbsp;tím, jak rustová část jádra roste, roste i&nbsp;tlak distribucí na to, aby toolchain nebyl vázaný na jediný kompilátor.</p>

<h2>Tři milníky místo verzí GCC</h2>
<p>V&nbsp;březnu 2026 tým přeorganizoval plán práce: místo cílení na konkrétní vydání GCC zavedl tři milníky podle schopností. „Embedded Rust compiler“ má zvládnout programy bez standardní knihovny, závislé jen na balíčku core. „Rust-for-Linux compiler“ k&nbsp;tomu přidá balíček alloc a&nbsp;konkrétní balíčky, které používá jádro. „General purpose compiler“ má nakonec zvládnout rustový kód obecně, ne jen jádro.</p>
<p>První milník je podle květnové zprávy skoro hotový. Druhý, klíčový pro jádro, stoupl z&nbsp;16&nbsp;procent v&nbsp;únoru na 35 v&nbsp;květnu. Dílčí čísla to rozepisují podrobněji: podpora balíčku compiler_builtins a&nbsp;funkce build_error je hotová na sto procent, balíček ffi na 40, ale makra jádra, rozhraní uapi i&nbsp;hlavní soubory jádra byly v&nbsp;květnu pořád na nule.</p>

<h2>Chybějící destruktory</h2>
<p>Rust spravuje zdroje modelem RAII: když hodnota vypadne ze scope, kompilátor sám zavolá její destruktor podle traitu Drop. Sledovat, kdy se má proměnná uklidit, je složité, protože stav její inicializace se mění podle průběhu programu – kompilátor proto musí analyzovat řídicí tok a&nbsp;generovat takzvané drop flags, tedy proměnné za běhu, které říkají, jestli je hodnotu ještě potřeba zrušit. Tahle analýza v&nbsp;gccrs podle LWN chyběla úplně, takže se volání Drop::drop() někdy vynechávalo nebo bylo špatně.</p>
<p>V&nbsp;jádru to není kosmetická chyba. Rust-for-Linux vrací při zamčení zámku takzvaný MutexGuard, jehož implementace Drop zámek uvolní. Bez správného volání Drop by zámek zůstal držený i&nbsp;po tom, co strážce vypadl ze scope – to znamená zablokovaný kód nebo deadlock. Na infrastruktuře pro Drop od května pracuje účastnice Google Summer of Code Janet Chien.</p>

<h2>Jmenný prostor, který si kompilátor pletl</h2>
<p>Testování na standardní knihovně a&nbsp;jádru odhalilo i&nbsp;chybu ve zpracování jmen. Rust rozlišuje čtyři jmenné prostory – pro hodnoty (funkce, statické proměnné), makra, typy a&nbsp;pro životnosti a&nbsp;návěští. Když gccrs hledal definici položky, hledal ji rovnou ve prostoru cílového typu: u&nbsp;funkce tedy ve prostoru hodnot. Jenže moduly a&nbsp;veřejně viditelné importy leží ve prostoru typů, takže bez jejich vyřešení tam kompilátor nedokázal projít cestou k&nbsp;funkci vůbec.</p>
<p>Oprava znamenala přepsat vnitřní datové struktury a&nbsp;část visitor kódu v&nbsp;celém překladači. Do května se tím podařilo správně rozpustit hluboko zanořené importy v&nbsp;balíčku core a&nbsp;chování se přiblížilo rustc.</p>

<h2>Atributy pro jádro a&nbsp;chybějící metadata</h2>
<p>Podle únorové zprávy přepracoval hlavní vývojář Pierre-Emmanuel Patry i&nbsp;zpracování atributů typu #[cfg()], které řídí podmíněný překlad. Odstraňování položek podle cfg rozdělil do dvou průchodů – bez toho nešlo podporovat nestabilní funkce jádra, které při expanzi maker potřebují atributy nejdřív odstranit a&nbsp;teprve pak validovat. V&nbsp;březnu k&nbsp;tomu přibyl přepínač -frust-crate-attr, obdoba přepínače -Zcrate-attr v&nbsp;rustc, který umí vložit atribut (třeba #![no_core]) při volání kompilátoru bez zásahu do zdrojového kódu.</p>
<p>Propojování rustových balíčků jádra pak odhalilo další chybu: exportovaná metadata v&nbsp;souborech .rlib některým balíčkům chyběla u&nbsp;vnořených modulů, takže se nepodařilo dohledat závislosti. Testy na to nenarazily, protože počítaly s&nbsp;plošší strukturou modulů – objevilo se to až na reálném kódu jádra a&nbsp;vyvolalo přepracování celého zpracování metadat.</p>

<h2>Kde to dnes stojí</h2>
<p>Gccrs dnes umí přeložit samostatné programy bez závislosti na core (no_core) a&nbsp;zvládá zpracovat kód balíčku core i&nbsp;většinu jádra po syntaktické stránce. Skutečné spuštění jádra je ale pořád daleko – ukazují to nulová procenta u&nbsp;maker, uapi a&nbsp;hlavních souborů jádra ve vlastním přehledu projektu. Letos začali přispívat i&nbsp;dva účastníci Google Summer of Code (Enes Çevik na balíčku alloc, Janet Chien na destruktorech) a&nbsp;stážista Zhi Heng, který se věnuje testům na kódu jádra a&nbsp;průběžné integraci.</p>
<p>Slabinou dlouho bylo prosazování změn do hlavního stromu GCC – rozsáhlé záplaty jako přepis jmenných prostorů narážely na omezenou kapacitu recenzentů. Podle LWN se to zlepšilo poté, co dva vývojáři gccrs dostali status správců GCC a&nbsp;mohou si změny připravovat ve vlastní větvi a&nbsp;slučovat je hromadně. Patry a&nbsp;Arthur Cohen mají letos přednášku „Compiling the Linux kernel with gccrs“ na RustConf v&nbsp;Montrealu a&nbsp;na EuroRust v&nbsp;Barceloně.</p>

<p>Výčet opravených chyb by mohl budit dojem, že má jádro k&nbsp;překladu blízko – čísla z&nbsp;vlastního přehledu gccrs ale ukazují, že klíčové části pro jeho spuštění jsou pořád na nule. Chyby, na které tým narazil (špatný jmenný prostor, chybějící destruktory, děravá metadata), jsou přesně ten druh problémů, který se v&nbsp;malých testech neprojeví a&nbsp;vyleze až na reálném kódu.</p>

<h2>Zdroje</h2>
<ul>
<li><a href="https://lwn.net/SubscriberLink/1083202/f1ba926cd57ac5c5/" rel="noopener">Progress toward compiling Linux with gccrs</a>, LWN.net, 28.&nbsp;července 2026</li>
<li><a href="https://rust-gcc.github.io/2026/06/02/2026-05-monthly-report.html" rel="noopener">May 2026 Monthly report</a>, gccrs (Rust-GCC)</li>
<li><a href="https://rust-gcc.github.io/2026/03/10/2026-02-monthly-report.html" rel="noopener">February 2026 Monthly report</a>, gccrs (Rust-GCC)</li>
<li><a href="https://github.com/Rust-GCC/gccrs" rel="noopener">Rust-GCC/gccrs</a>, GitHub</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/m2-2026-08-04-gccrs-rust-logo-b4329123.png" length="53329" type="image/png" />
		</item>
		<item>
			<title>GCC odmítne příspěvky od jazykových modelů zhruba od patnácti řádků</title>
			<link>https://tech-blog.chatujme.cz/clanek/gcc-ai-politika-patnact-radku</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/gcc-ai-politika-patnact-radku</guid>
			<pubDate>Mon, 03 Aug 2026 09:58:22 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Řídicí výbor překladače GCC přijal 29. července 2026 pravidla pro příspěvky, na kterých se podílel jazykový model. Odmítá ty právně významné, tedy zhruba nad patnáct řádků, ale u testovacích sad dělá výslovnou výjimku. Rešerši, hledání chyb ani revizi záplat modelem nezakazuje.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/m2-2026-08-03-gcc-run-23d4a623.jpg" alt="Tričko s nápisem RUN GCC"><figcaption>Tričko s&nbsp;nápisem RUN GCC na konferenci LibrePlanet 2015. Foto: Sucheta Ghoshal, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>GCC je sada překladačů projektu GNU; vedle jazyků C a&nbsp;C++ jich zvládá dalších deset, od Fortranu přes Adu a&nbsp;Go po Rust. Jeho řídicí výbor <a href="https://gcc.gnu.org/pipermail/gcc/2026-July/248628.html" rel="noopener">oznámil 29.&nbsp;července 2026</a>, že přijal doporučení pracovní skupiny a&nbsp;projekt má od té chvíle pravidla pro příspěvky, na kterých se podílel jazykový model. Celé znění je na stránce <a href="https://gcc.gnu.org/ai-policy.html" rel="noopener">ai-policy.html</a>.</p>

<h2>Hranice je v&nbsp;cizím dokumentu, ne v&nbsp;pravidlech samotných</h2>

<p>Nosná věta zní, že projekt zatím odmítne každý „právně významný“ příspěvek, který obsahuje výstup jazykového modelu nebo je z&nbsp;takového výstupu odvozený. Co je právně významné, si pravidla nedefinují – přebírají to z&nbsp;<a href="https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html" rel="noopener">pokynů pro správce balíků GNU</a>. Tam stojí, že hranice leží kolem patnácti řádků kódu nebo textu; pod ní podle nadace nevzniká potřeba řešit práva zvlášť.</p>

<p>Týž dokument ale dodává něco, co se v&nbsp;přehledech obvykle ztratí. Nepočítá se jedna záplata, počítá se souhrn všeho, co daný člověk projektu poslal, a&nbsp;nezáleží na tom, kdy jednotlivé kusy poslal. Kdo tedy pošle desetkrát pět řádků od modelu, hranici překročí, i&nbsp;když ji jednotlivou záplatou nepřekročil ani jednou.</p>

<h2>Testovací sady jsou výslovná výjimka</h2>

<p>Jedinou výjimku dělají pravidla opačným směrem, než by se čekalo: právně významný příspěvek do <strong>testovacích sad</strong> smí správce přijmout, i&nbsp;když ho model vyrobil celý. Menší příspěvky projít můžou taky, ale musí splnit obvyklé podmínky a&nbsp;být zřetelně označené. Mimo pravidla stojí kód, který GCC jen přebírá odjinud a&nbsp;spravuje ho někdo jiný; jmenován je knihovní balík libsanitizer.</p>

<h2>Podepsat se smí jen člověk</h2>

<p>Druhá polovina textu je o&nbsp;stopě, kterou to nechá v&nbsp;historii. Zpráva u&nbsp;commitu, který nese obsah od modelu, musí obsahovat značku <code>Assisted-by:</code>. Příspěvek musí poslat člověk, který změně rozumí a&nbsp;umí na dotazy k&nbsp;ní odpovědět, a&nbsp;rozhodnout o&nbsp;jejím přijetí musí zase člověk. Značku <code>Signed-off-by:</code>, tedy potvrzení <a href="https://developercertificate.org/" rel="noopener">Developer Certificate of Origin</a>, smí připojit jedině člověk a&nbsp;model nesmí do repozitáře commitovat vůbec.</p>

<p>Má to praktický důvod. GCC <a href="https://gcc.gnu.org/contribute.html" rel="noopener">nabízí přispěvatelům dvě cesty</a>, jak vyřešit práva k&nbsp;většímu příspěvku: buď je postoupí Nadaci pro svobodný software, nebo se pod něj podepíšou právě tou značkou. Obojí stojí na tom, že se konkrétní člověk zaručí za původ kódu – a&nbsp;u&nbsp;textu, který vypadl z&nbsp;modelu, se za původ zaručit nedá.</p>

<h2>Co pravidla nezakazují</h2>

<p>V&nbsp;tomhle je text nezvykle konkrétní. Rešerše, rozbor, hledání a&nbsp;hlášení chyb, revize záplat i&nbsp;ladění modelem jsou v&nbsp;pořádku, dokud jeho výstup neskončí v&nbsp;příspěvku. U&nbsp;hlášení chyb je připsaná podmínka, že se výstup neposílá doslova bez rozmyslu, a&nbsp;u&nbsp;revize, že model lidskou revizi doplňuje, ne nahrazuje.</p>

<p>Stranou stojí i&nbsp;osobní nástroje: čtečka obrazovky, převod textu na řeč, překlad, kontrola pravopisu a&nbsp;gramatiky. Jedinou podmínkou je, že si přispěvatel jejich výstup ověří.</p>

<h2>Napsané tak, aby to šlo opsat</h2>

<p>Pravidla připravila pracovní skupina vedená Jonathanem Wakelym a&nbsp;oznámení jmenuje dalších sedm lidí, kteří v&nbsp;ní byli. Text je označený licencí CC0 1.0, tedy vzdáním se práv – jiný projekt si ho může vzít a&nbsp;použít, aniž by se koho ptal. Výbor zároveň píše, že se pravidla budou vyvíjet; nejzazší termín revize dává na začátek roku 2027.</p>

<p>Slabým místem je vymahatelnost a&nbsp;diskuse pod <a href="https://lwn.net/Articles/1086041/" rel="noopener">zprávou o&nbsp;pravidlech na LWN</a> se točila hlavně kolem ní: pravidlo, které se nedá ověřit, podle jedněch trestá poctivé a&nbsp;vyrábí tiché obcházení. Proti tomu tam zaznělo, že řada přispěvatelů ho dodrží prostě proto, že si projektu váží. Pravidla ten spor neřeší a&nbsp;ani se o&nbsp;to nepokoušejí – jejich úplně první oddíl místo toho žádá, aby se s&nbsp;přispěvatelem, který je ještě nezná, jednalo vlídně.</p>

<p>Podobným směrem šly v&nbsp;posledních týdnech i&nbsp;jiné projekty: <a href="/clanek/codeberg-zakaz-ai-projektu">Codeberg zakázal projekty psané převážně modely</a> a&nbsp;GNOME naopak <a href="/clanek/gnome-pravidla-rozsireni-pro-modely">sepsal pravidla pro rozšíření, která modely generují</a>.</p>

<p>Náš názor: měřitelný dopad bude mít nejspíš značka <code>Assisted-by:</code>. Je to jediná část pravidel, po které v&nbsp;repozitáři zůstane něco, co jde spočítat – u&nbsp;zbytku se projekt spoléhá na to, že mu přispěvatelé řeknou pravdu.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://gcc.gnu.org/ai-policy.html" rel="noopener">AI Policy projektu GCC</a>, gcc.gnu.org</li>
<li><a href="https://gcc.gnu.org/pipermail/gcc/2026-July/248628.html" rel="noopener">GCC AI Policy Announcement</a>, archiv konference gcc@gcc.gnu.org, 29.&nbsp;července 2026</li>
<li><a href="https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html" rel="noopener">Legally Significant Changes</a>, Information for Maintainers of GNU Software</li>
<li><a href="https://gcc.gnu.org/contribute.html" rel="noopener">Contributing to GCC</a>, oddíl Legal Prerequisites</li>
<li><a href="https://lwn.net/Articles/1086041/" rel="noopener">GCC steering committee announces AI policy</a>, LWN.net, 29.&nbsp;července 2026</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/m2-2026-08-03-gcc-run-23d4a623.jpg" length="52128" type="image/jpeg" />
		</item>
		<item>
			<title>PHP 8.6 dostalo částečnou aplikaci funkcí, zatím je jen ve třetí alfě</title>
			<link>https://tech-blog.chatujme.cz/clanek/php-8-6-castecna-aplikace-funkci</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/php-8-6-castecna-aplikace-funkci</guid>
			<pubDate>Mon, 03 Aug 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Vývojáři PHP vydali 30. července třetí alfu verze 8.6. Je v ní částečná aplikace funkcí: když se místo argumentu napíše otazník, funkce se nezavolá, ale vznikne closure, které na chybějící argument čeká. Ostrá verze je v plánu na 19. listopadu.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-php-8-6-alfa-3-castecna-aplikace-funkci-b6f5bdde.jpg" alt="Modrá figurka slona elePHPant"><figcaption>Figurka slona elePHPant, maskota PHP. Foto: Atomic Taco from Seattle, WA, USA, Wikimedia Commons (CC BY-SA 2.0)</figcaption></figure><p>Vývojový tým PHP oznámil 30.&nbsp;července <a href="https://www.php.net/archive/2026.php" target="_blank" rel="noopener">třetí alfu verze 8.6</a>. Alfa je předběžné vydání pro zkoušení, oznámení u&nbsp;ní výslovně varuje, že do ostrého provozu nepatří. Zajímavá je tím, co se do ní dostalo: částečná aplikace funkcí, jejíž menší verzí byl zkrácený zápis odkazu na funkci z&nbsp;PHP 8.1.</p><h2>Otazník místo argumentu</h2><p>Částečná aplikace znamená, že se funkce zavolá jen s&nbsp;částí argumentů a&nbsp;zbytek se doplní později. Nový zápis to dělá dvěma značkami: otazník zastupuje právě jeden argument a&nbsp;tři tečky zbytek. Když je PHP ve volání najde, funkci nezavolá, ale vyrobí closure (anonymní funkci), jehož parametry odpovídají tomu, co zůstalo nedoplněné.</p><pre><code class="language-php">function stuff(int $i, string $s, float $f): string {}

// closure, které čeká jen na $s
$c = stuff(1, ?, 3.14);

// closure, které čeká na $s i $f
$d = stuff(1, ...);</code></pre><p>Praktický smysl to má u&nbsp;zpětných volání. <a href="https://wiki.php.net/rfc/partial_function_application_v2" target="_blank" rel="noopener">Návrh RFC</a> to ukazuje na <code>array_map()</code>: místo anonymní funkce, ve které se musí ručně zopakovat všechny parametry i&nbsp;typy, se napíše volání s&nbsp;otazníkem na místě, kam přijde položka pole.</p><pre><code class="language-php">$result = array_map(str_replace('hello', 'hi', ?), $arr);</code></pre><h2>Co closure podědí z&nbsp;původní funkce</h2><p>Z&nbsp;původní funkce se do vzniklého closure přenese jméno parametru, jeho typ, volitelnost, výchozí hodnota i&nbsp;to, jestli se předává odkazem. Z&nbsp;atributů ale jen dva: <code>#[NoDiscard]</code> a&nbsp;<code>#[SensitiveParameter]</code>. Návrh to zdůvodňuje tím, že oba mají přímý dopad za běhu, kdežto <code>#[Deprecated]</code> by ohlásil zastaralost dvakrát místo jednou a&nbsp;<code>#[Override]</code> na closure nedává smysl. U&nbsp;vlastních atributů PHP neví, jestli je kopírovat, takže je zahazuje.</p><p>Tím se nový zápis liší od zkráceného odkazu na funkci, který přidalo PHP 8.1 pod názvem first-class callable syntax. Ten si atributy nechává všechny, protože mezilehlé closure vůbec nevytváří, jen na funkci odkazuje. Návrh sám ho popisuje jako degenerovaný případ částečné aplikace: <code>foo(...)</code> je zápis, ve kterém se nedoplňuje nic.</p><p>V&nbsp;dodatku k&nbsp;návrhu stojí ještě jedna věc, kterou samotný text původně neuváděl. Closure dědí rozsah, ve kterém vzniklo, stejně jako každé jiné. Částečně použít se proto dá i&nbsp;soukromá metoda a&nbsp;výsledek se pak dá předat ven z&nbsp;třídy.</p><h2>Od hlasování do alfy uplynulo necelých osm měsíců</h2><p>Návrh nese jméno Partial Function Application (v2), podepsaní jsou pod ním Larry Garfield a&nbsp;Arnaud Le Blanc a&nbsp;je datovaný 3.&nbsp;června 2025. Je to druhý pokus: podle vlastních slov je v&nbsp;podstatě shodný s&nbsp;dřívějším návrhem téhož jména a&nbsp;zkrácený odkaz na funkci z&nbsp;PHP 8.1 z&nbsp;něj tehdy vznikl jako menší první krok.</p><p>Ke schválení bylo potřeba dvoutřetinové většiny; konec hlasování měl podle návrhu připadnout na 5.&nbsp;prosince 2025 ve 12&nbsp;hodin světového času a&nbsp;dnes je uzavřené. Stav návrhu je dnes uvedený jako implementovaný a&nbsp;odkazuje na dva sloučené commity s&nbsp;poznámkou, že jsou v&nbsp;alfě 3. Mezi koncem hlasování a&nbsp;vydáním, ve kterém si zápis může někdo poprvé vyzkoušet, je tedy necelých osm měsíců.</p><h2>Co dalšího do alfy přibylo</h2><p>Poznámky k&nbsp;přechodu v&nbsp;<a href="https://github.com/php/php-src/blob/master/UPGRADING" target="_blank" rel="noopener">souboru UPGRADING</a> vypisují u&nbsp;8.6 i&nbsp;řadu drobností. Funkce <code>clamp()</code> vrátí hodnotu, pokud je v&nbsp;zadaném rozsahu, a&nbsp;jinak nejbližší mez. Přibyl výčtový typ <code>SortDirection</code>, funkce <code>grapheme_strrev()</code> v&nbsp;rozšíření intl, <code>ReflectionParameter::getDocComment()</code> a&nbsp;<code>mysqli::quote_string()</code>. Větší kusy jsou tři: rozhraní pro polling, tedy dotazování na připravenost vstupu a&nbsp;výstupu (jmenný prostor <code>Io\Poll</code>), obnovení relace TLS u&nbsp;proudů a&nbsp;nové rozhraní pro chyby proudů. Opcache umí nově překlad za běhu i&nbsp;pro vláknově bezpečná sestavení (ZTS) na procesorech Apple Silicon.</p><p>Nezávislý přehled novinek na <a href="https://php.watch/versions/8.6" target="_blank" rel="noopener">PHP.Watch</a> u&nbsp;verze 8.6 uvádí tutéž alfu 3 a&nbsp;ze zmíněných věcí jmenuje <code>clamp()</code>, <code>SortDirection</code> a&nbsp;<code>grapheme_strrev()</code>.</p><h2>Co se naopak ruší</h2><p>Za zastaralé je nově označené celé mbregex, tedy regulární výrazy v&nbsp;rozšíření mbstring (funkce <code>mb_ereg</code> a&nbsp;další). Důvod je v&nbsp;<a href="https://wiki.php.net/rfc/eol-oniguruma" target="_blank" rel="noopener">samostatném návrhu</a>: knihovna Oniguruma, na které rozšíření stojí, se už neudržuje. Zastarání samo nic nerozbije, program jen začne hlásit varování; je to ale upozornění dopředu pro každého, kdo tyhle funkce v&nbsp;kódu má.</p><p>Zastaralé je taky vracení hodnoty z&nbsp;<code>__construct()</code> a&nbsp;<code>__destruct()</code> a&nbsp;jejich psaní jako generátoru. Adresa <code>php://filter</code> s&nbsp;víc než šestnácti filtry hlásí varování, dokud se počet nenastaví výslovně. Ze změn, které nejsou zpětně slučitelné, jsou podstatné dvě: <code>preg_grep()</code> při chybě knihovny PCRE vrátí <code>false</code> místo částečného pole a&nbsp;vlastnosti rozšíření DOM, které byly dosud v&nbsp;dokumentaci označené jen ke čtení, jsou nově deklarované s&nbsp;asymetrickou viditelností, takže zápis zvenčí hlásí jinou chybu než dřív.</p><h2>Beta 13.&nbsp;srpna, ostrá verze v&nbsp;listopadu</h2><p><a href="https://wiki.php.net/todo/php86" target="_blank" rel="noopener">Plán vydání</a> je rozepsaný do 19.&nbsp;listopadu 2026, kdy má vyjít ostrá verze. Do 11.&nbsp;srpna mají být sloučené všechny návrhy mířící na 8.6, 13.&nbsp;srpna přijde beta 1 a&nbsp;s&nbsp;ní měkké zmrazení novinek, u&nbsp;kterého už musí být hlasování uzavřená. Tvrdé zmrazení je na 22.&nbsp;září, první kandidát na vydání o&nbsp;dva dny později. Vydání řídí trojice: Daniel Scherzer jako veterán, Matteo Beccati a&nbsp;Joe Ferguson jako nováčci.</p><p>Pro toho, kdo píše knihovny, je alfa první příležitost, jak narazit na problém dřív, než se verze uzavře. Otazník ve volání navíc není povinnost: kdo ho psát nechce, píše anonymní funkce jako dosud a&nbsp;nic se mu nerozbije. Změní se podle nás spíš zvyk – tam, kde se dnes opisuje celá hlavička funkce kvůli jednomu argumentu, bude stačit jeden znak.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-php-8-6-alfa-3-castecna-aplikace-funkci-b6f5bdde.jpg" length="43461" type="image/jpeg" />
		</item>
		<item>
			<title>Picolibc 1.8.12 dostal vlastní vrstvu linuxových systémových volání</title>
			<link>https://tech-blog.chatujme.cz/clanek/picolibc-1-8-12-nativni-linuxova-vrstva</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/picolibc-1-8-12-nativni-linuxova-vrstva</guid>
			<pubDate>Sun, 02 Aug 2026 01:54:51 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Vestavěná knihovna jazyka C, kterou udržuje Keith Packard, vyšla po půl roce ve verzi 1.8.12. Přibyl v ní adresář libos/linux se 110 zdrojovými soubory, které sahají na linuxové jádro přímo, bez jiné knihovny C pod sebou. V předchozí verzi 1.8.11 ten adresář v repozitáři vůbec nebyl.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-picolibc-1-8-12-8ddea44a.jpg" alt="Detail čipu SiFive FE310-G000 na vývojové desce HiFive1"><figcaption>Detail čipu SiFive FE310-G000 na vývojové desce HiFive1. Na takhle malé systémy Picolibc cílí od začátku. Foto: Gareth Halfacree from Bradford, UK, Wikimedia Commons (CC BY-SA 2.0)</figcaption></figure>
<p>Keith Packard zveřejnil 1.&nbsp;srpna <a href="https://github.com/picolibc/picolibc/releases/tag/1.8.12" rel="noopener">Picolibc 1.8.12</a>. Předchozí vydání 1.8.11 je z&nbsp;27.&nbsp;ledna, takže mezi nimi uplynulo půl roku; <a href="https://github.com/picolibc/picolibc/compare/1.8.11...1.8.12" rel="noopener">srovnání obou značek</a> na GitHubu vypisuje 426 commitů.</p>
<p>Picolibc je knihovna jazyka C pro vestavěné systémy s&nbsp;málo pamětí. Vznikla smícháním kódu z&nbsp;<a href="http://sourceware.org/newlib/" rel="noopener">newlibu</a> a&nbsp;<a href="https://www.nongnu.org/avr-libc/" rel="noopener">AVR Libc</a> a&nbsp;šíří se pod licencemi typu BSD. Vedle linuxové úlohy průběžné integrace má repozitář i&nbsp;úlohy pro Zephyr a&nbsp;coreboot a&nbsp;samostatný adresář se soubory pro Zephyr.</p>
<h2>Nová vrstva volá jádro sama</h2>
<p>Nejpodstatnější změna je adresář <code>libos</code>, který ve verzi 1.8.11 v&nbsp;repozitáři vůbec nebyl. Podpora poloviční hostitelské obsluhy, tedy semihostingu, se do něj přestěhovala z&nbsp;nejvyšší úrovně a&nbsp;vedle ní přibyly tři sourozenci: <code>fallback</code>, <code>dummyhost</code> a&nbsp;hlavně <a href="https://github.com/picolibc/picolibc/tree/1.8.12/libos/linux" rel="noopener"><code>linux</code></a>.</p>
<p>Ten poslední obsahuje 110 zdrojových souborů v&nbsp;jazyce C. Většina z&nbsp;nich je jedna funkce POSIX: <code>open</code>, <code>poll</code>, <code>sigaction</code>, <code>mmap</code>, <code>waitpid</code>, obsluha terminálu přes <code>tcgetattr</code> a&nbsp;<code>tcsetattr</code>. Nejsou to obálky nad cizí knihovnou C. Zbytek souborů jsou převodní pomůcky mezi tvarem, který drží jádro, a&nbsp;tím, se kterým pracuje knihovna. Vstup do jádra řeší assemblerový soubor <code>syscall.S</code> v&nbsp;<a href="https://github.com/picolibc/picolibc/tree/1.8.12/libos/linux/machine" rel="noopener">adresáři podle architektury</a>; vlastní ho aarch64, arm a&nbsp;x86. Hlavičky s&nbsp;čísly volání, chybovými kódy a&nbsp;rozložením struktur jsou tamtéž pro pět architektur, k&nbsp;předchozím třem navíc pro i686 a&nbsp;x86_64.</p>
<p>Poznámky k&nbsp;vydání to shrnují stručně: nativní podpora Linuxu na několika architekturách dovolí sestavit řadu linuxových aplikací a&nbsp;testovacích případů. Ta druhá polovina není vedlejší. Picolibc se dosud testovalo hlavně na holém železe pod emulátorem QEMU, takže možnost pustit sadu testů rovnou na hostiteli zkracuje smyčku vývoje.</p>
<p>Zajímavý je způsob, jak se knihovna vyrovnává s&nbsp;rozdílnými datovými strukturami. Dřív se některé struktury Picolibc snažily napodobit rozložení, které používá Linux. Nové vydání to opouští a&nbsp;obsah převádí až za běhu. V&nbsp;adresáři je i&nbsp;podadresář <code>utils</code> s&nbsp;generátory <code>make-syscall.c</code>, <code>make-errno.c</code> a&nbsp;<code>struct-analyze.c</code>, ke kterým patří popisy struktur v&nbsp;souborech JSON.</p>
<h2>Kolik architektur to vlastně je</h2>
<p>Server Phoronix, který o&nbsp;vydání <a href="https://www.phoronix.com/news/Picolibc-1.8.12-Released" rel="noopener">psal 1.&nbsp;srpna</a>, napsal, že Picolibc rozšiřuje nativní podporu Linuxu na další procesorové architektury, a&nbsp;připojil výčet: ARC, ARM, i386, LatticeMico32, LoongArch, m68k, MIPS, MSP430, Nios II, OpenRisc, Power9, Renesas RX, RISC-V, SparcV8, SuperH, x86_64 a&nbsp;Xtensa ESP32.</p>
<p>Ten seznam ale v&nbsp;<a href="https://github.com/picolibc/picolibc/blob/1.8.12/README.md" rel="noopener">souboru README</a> stojí pod nadpisem Supported Architectures a&nbsp;úvodní věta pod ním mluví o&nbsp;architekturách, pro které má knihovna zabudované testování. Na nativní linuxovou vrstvu se ten výčet nevztahuje. Nativní port má v&nbsp;repozitáři pět architektur hlaviček a&nbsp;tři se vstupním kódem do jádra, jak je vidět výš. Poznámky k&nbsp;vydání ostatně mluví o&nbsp;několika architekturách, ne o&nbsp;všech. Rozdíl je podstatný pro každého, kdo si podle výčtu vybírá cíl.</p>
<h2>Typ off64_t zmizel</h2>
<p>Z&nbsp;hlavičkových souborů zmizel typ <code>off64_t</code>. Nová verze má jen <code>off_t</code> a&nbsp;ten je vždy 64bitový. Jinde je to dvojice: 32bitový <code>off_t</code> na velké soubory nestačil, takže k&nbsp;němu přibyl širší typ a&nbsp;s&nbsp;ním <a href="https://man7.org/linux/man-pages/man3/lseek64.3.html" rel="noopener">druhá sada funkcí</a> s&nbsp;příponou 64. Vestavěná knihovna psaná od nuly tenhle dluh nést nemusí, takže si Picolibc zvolilo jeden typ. Kdo měl <code>off64_t</code> v&nbsp;kódu, musí ho přepsat.</p>
<h2>RISC-V kopíruje paměť vektorově</h2>
<p>Funkce <code>memset</code>, <code>memcpy</code> a&nbsp;<code>memmove</code> dostaly pro <a href="/clanek/netbsd-11-0-riscv-microvm">RISC-V</a> vektorové provedení, které přispěl Pincheng Wang. Abdallah Abdelhafeez k&nbsp;tomu doplnil 32bitové vektorové varianty a&nbsp;přeuspořádáním instrukcí zrychlil <code>strcmp</code>. Týž přispěvatel opravil v&nbsp;obecné céčkové verzi <code>memcpy</code> pro RISC-V smyčku, která kopírovala devět prvků místo osmi.</p>
<p>Přibyla i&nbsp;podpora rozšíření Zcmt (Sam Elliott) a&nbsp;varianta spouštěcího kódu, která zapíná ochranu toku řízení přes zicfilp a&nbsp;zicfiss (Ahmed Shehab). Na architektuře AArch64 inicializuje spouštěcí kód picocrt jednotku SME.</p>
<h2>Zamykání se pročistilo</h2>
<p>Vnitřní zámek knihovny se přestal zamykat rekurzivně a&nbsp;Kushal Pal opravil souběh při líné inicializaci vyrovnávaného vstupu a&nbsp;výstupu. Brian Cain doplnil k&nbsp;funkcím, které mění stav zámku, anotace pro rozbor bezpečnosti vláken v&nbsp;překladači Clang. Dokumentace ke&nbsp;knihovně popisuje jediný globální zámek pro sdílená data (<code>malloc</code>, <code>atexit</code>, <code>arc4random</code>, <code>getenv</code>, časová pásma a&nbsp;staré globální proměnné stdio) a&nbsp;zámky na jednotlivé soubory pro vyrovnávaný vstup a&nbsp;výstup.</p>
<p>Z&nbsp;drobnějších změn: obsluha semihostingu na ARM nově zachovává registr LR a&nbsp;umí použít instrukci <code>hlt</code> místo <code>svc</code>; pro architekturu verze 8 a&nbsp;vyšší je to doporučený postup. Přibyly funkce pro práci se souborem skupin podle POSIX, <code>fopencookie</code> a&nbsp;<code>open_memstream</code> od Alexeye Lapshina a&nbsp;dvojice <code>quick_exit</code> a&nbsp;<code>at_quick_exit</code>. Architektura Hexagon dostala semihosting, prostředí pro práci s&nbsp;plovoucí čárkou, dynamické linkování i&nbsp;optimalizované matematické funkce.</p>
<p>Podle nás je nativní linuxová vrstva zajímavější jako nástroj pro vývojáře knihovny než jako nabídka koncovým programům. Kdo píše běžnou aplikaci pro Linux, glibc ani musl neopustí; kdo ladí Picolibc, ušetří kolo přes emulátor.</p>
<h2>Zdroje</h2>
<ul><li><a href="https://github.com/picolibc/picolibc/releases/tag/1.8.12" rel="noopener">Picolibc 1.8.12, poznámky k&nbsp;vydání (GitHub)</a></li><li><a href="https://github.com/picolibc/picolibc/tree/1.8.12/libos/linux" rel="noopener">Adresář libos/linux ve značce 1.8.12</a></li><li><a href="https://github.com/picolibc/picolibc/blob/1.8.12/README.md" rel="noopener">README Picolibc</a></li><li><a href="https://www.phoronix.com/news/Picolibc-1.8.12-Released" rel="noopener">Phoronix: Picolibc 1.8.12 Brings Latest Improvements To This Embedded-Focused C Library</a></li></ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-picolibc-1-8-12-8ddea44a.jpg" length="94648" type="image/jpeg" />
		</item>
		<item>
			<title>PHP opravil SQL injekci v rozšíření pro PostgreSQL, týká se všech čtyř větví</title>
			<link>https://tech-blog.chatujme.cz/clanek/php-sql-injekce-pgsql-bccomp</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/php-sql-injekce-pgsql-bccomp</guid>
			<pubDate>Sat, 01 Aug 2026 18:54:15 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[PHP vydalo 30. července opravné verze 8.2.33, 8.3.33, 8.4.24 a 8.5.9. Dvě z opravených chyb mají známku 8,1. První je SQL injekce v rozšíření pro PostgreSQL: čtyři funkce obalovaly hodnoty do řetězce, ve kterém má zpětné lomítko zvláštní význam, ale neošetřovaly ho. Druhá je zápis mimo přidělenou paměť ve funkci bccomp().]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-php-sql-injekce-pgsql-bccomp-c92b4c0d.jpg" alt="Modrý plyšový slon s nápisem php"><figcaption>Plyšový elePHPant, maskot PHP. Foto: Atomic Taco from Seattle, WA, USA, Wikimedia Commons (CC BY-SA 2.0)</figcaption></figure>

<p>Projekt PHP vydal 30.&nbsp;července 2026 opravné verze všech čtyř udržovaných větví naráz: <a href="https://www.php.net/ChangeLog-8.php" target="_blank" rel="noopener">8.2.33, 8.3.33, 8.4.24 a 8.5.9</a>. Dvě z&nbsp;opravených chyb dostaly podle CVSS 4.0 shodnou známku 8,1, tedy vysokou závažnost. Jedna z&nbsp;nich dovoluje podstrčit vlastní SQL dotaz aplikaci, která ukládá data do <a href="/clanek/postgresql-19-grafove-dotazy">PostgreSQL</a> přes funkce vestavěné v&nbsp;PHP. Udržované větve jsou podle <a href="https://www.php.net/supported-versions.php" target="_blank" rel="noopener">přehledu na php.net</a> právě čtyři; nejstarší z&nbsp;nich, 8.2, je od konce roku 2024 jen v&nbsp;bezpečnostním režimu a&nbsp;opravy má dostávat do konce letošního roku.</p>

<h2>Escapování, které nepočítalo se zpětným lomítkem</h2>

<p>Čtyři funkce rozšíření pgsql – pg_insert(), pg_update(), pg_select() a&nbsp;pg_delete() – berou hodnoty jako pole a&nbsp;dotaz si z&nbsp;nich složí samy. Ošetření hodnot má na starosti vnitřní funkce php_pgsql_convert(). Ta zavolá knihovní PQescapeStringConn() z&nbsp;libpq a&nbsp;výsledek zabalí do řetězce ve tvaru E'…'.</p>

<p>Právě to zabalení je jádro chyby, kterou popisuje hlášení <a href="https://github.com/php/php-src/security/advisories/GHSA-7qpv-r5mr-78m4" target="_blank" rel="noopener">GHSA-7qpv-r5mr-78m4</a>, v&nbsp;registru vedené jako <a href="https://www.cve.org/CVERecord?id=CVE-2026-17543" target="_blank" rel="noopener">CVE-2026-17543</a>. Řetězec uvozený písmenem E je v&nbsp;PostgreSQL takzvaný escape string constant, tedy literál, ve kterém má zpětné lomítko zvláštní význam. PQescapeStringConn() ale zpětné lomítko nechá být, protože počítá s&nbsp;obyčejným literálem. Apostrof zdvojí, lomítko ne – a&nbsp;útočníkovi stačí poslat hodnotu, kde lomítko stojí těsně před apostrofem.</p>

<pre><code class="language-php">$result = pg_select($db, 'user', ['name' =&gt; "zzz\\' OR 1=1 --"]);
// SELECT * FROM "user" WHERE "name"='zzz\'' OR 1=1 --';</code></pre>

<p>V&nbsp;předané hodnotě je zpětné lomítko jen jednou; dvojité je zápis v&nbsp;PHP. Escapování z&nbsp;apostrofu udělá dvojici, jenže první z&nbsp;nich se kvůli lomítku čte jako obyčejný znak. Druhý apostrof tedy řetězec ukončí a&nbsp;všechno za ním se stane součástí dotazu – ukázka v&nbsp;hlášení vrátila celou tabulku. Oprava mění zabalování: hodnoty teď končí v&nbsp;obyčejném literálu, kde lomítko žádnou zvláštní roli nemá.</p>

<h2>Nastavení, se kterým se počítalo obráceně</h2>

<p>Že PQescapeStringConn() zpětné lomítko neošetří, není chyba libpq. Funkce se řídí nastavením spojení a&nbsp;<a href="https://www.postgresql.org/docs/current/runtime-config-compatible.html" target="_blank" rel="noopener">dokumentace PostgreSQL</a> u&nbsp;parametru standard_conforming_strings uvádí, že od verze 9.1 je výchozí hodnota zapnuto, kdežto starší vydání ho měla vypnuté. Zapnutý parametr znamená, že obyčejný literál bere zpětné lomítko doslova, jak žádá norma SQL – a&nbsp;escapovací funkce se podle toho zachová.</p>

<p>Nesoulad vzniká až tím, že PHP hotový řetězec vloží do E'…', kde platí opačné pravidlo. <a href="https://www.postgresql.org/docs/current/libpq-exec.html" target="_blank" rel="noopener">Dokumentace libpq</a> k&nbsp;tomu říká, že PQescapeStringConn() apostrofy kolem literálu sám negeneruje a&nbsp;dodat je musí volající. PHP je dodalo v&nbsp;podobě, se kterou se ošetření hodnot rozešlo.</p>

<h2>Druhá díra je v&nbsp;bccomp() a&nbsp;starších větví se netýká</h2>

<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-17544" target="_blank" rel="noopener">CVE-2026-17544</a> je jiného druhu: zápis mimo přidělenou paměť. Podle hlášení <a href="https://github.com/php/php-src/security/advisories/GHSA-x692-q9x7-8c3f" target="_blank" rel="noopener">GHSA-x692-q9x7-8c3f</a> vzniká v&nbsp;převodní funkci bc_str2num(), když zadané měřítko číslo zkrátí a&nbsp;z&nbsp;výsledku se pak ještě odstraní koncové nuly. Kód sníží počet desetinných míst, ale ukazatel na konec desetinné části nechá tam, kde byl. Následné kopírování pak přenese původní, nezkrácené číslo do vyrovnávací paměti, která je na ně malá.</p>

<p>BCMath drží malá čísla v&nbsp;malé oblasti na zásobníku a&nbsp;teprve větší v&nbsp;haldě, takže poškodit jde obojí. Oprava přidává jediný řádek: po odstranění nul se dorovná i&nbsp;ukazatel na konec. Záznam v&nbsp;registru CVE uvádí jako postižené jen větve 8.4 a&nbsp;8.5 – starší 8.2 a&nbsp;8.3 dostaly z&nbsp;tohohle vydání zbylé opravy, tuhle ne.</p>

<h2>Kdo má spěchat</h2>

<p>Vedle obou vysoce hodnocených chyb jsou ve vydání ještě dvě bezpečnostní opravy: pád při zpracování archivu phar s&nbsp;kruhovými symbolickými odkazy (<a href="https://www.cve.org/CVERecord?id=CVE-2026-7260" target="_blank" rel="noopener">CVE-2026-7260</a>, známka 5,4) a&nbsp;aktualizace knihovny libgd kvůli <a href="https://www.cve.org/CVERecord?id=CVE-2026-9672" target="_blank" rel="noopener">CVE-2026-9672</a>.</p>

<p>Podle nás spěchá nejvíc pgsql, i&nbsp;když obě chyby mají tutéž známku. Vektor CVSS u&nbsp;SQL injekce uvádí útok po síti, nízkou složitost a&nbsp;žádná potřebná oprávnění, a&nbsp;hlášení jmenuje jako místo, kde se vadné ošetření používá, právě ty čtyři funkce pro práci s&nbsp;tabulkou. Volání bccomp() s&nbsp;hodnotou od uživatele je proti tomu situace, kterou v&nbsp;běžné aplikaci potkáte spíš výjimečně. O&nbsp;jiných cestách k&nbsp;PostgreSQL, tedy o&nbsp;parametrizovaných dotazech přes pg_query_params() nebo přes PDO, hlášení nemluví.</p>

<p>Oba záznamy CVE mají ve vektoru zapsáno, že o&nbsp;zneužití v&nbsp;praxi se zatím neví. To ale platí ke dni vydání a&nbsp;u&nbsp;chyby, jejíž ukázka se vejde na jeden řádek, je to údaj s&nbsp;krátkou trvanlivostí. Podle nás je na téhle dvojici pozoruhodné hlavně to, že SQL injekce nevznikla v&nbsp;aplikaci, ale v&nbsp;kusu jazyka, který měl aplikaci před injekcí chránit.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-php-sql-injekce-pgsql-bccomp-c92b4c0d.jpg" length="44760" type="image/jpeg" />
		</item>
		<item>
			<title>GNOME sepsal pravidla pro psaní rozšíření rovnou pro modely, které je generují</title>
			<link>https://tech-blog.chatujme.cz/clanek/gnome-pravidla-rozsireni-pro-modely</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/gnome-pravidla-rozsireni-pro-modely</guid>
			<pubDate>Sat, 01 Aug 2026 10:54:10 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Do obchodu s rozšířeními pro GNOME Shell chodí balíčky od jazykových modelů a opakují tytéž chyby. Člen recenzního týmu proto sepsal seznam zlozvyků a správných tvarů a napsal ho pro modely, které blogy projektu indexují. Od 28. července je ten text součástí oficiální dokumentace gjs.guide.]]></description>
			<content:encoded><![CDATA[<p>Fronta na posouzení nových rozšíření pro GNOME Shell se plní kódem, který nikdo nepsal ručně. V&nbsp;týdenním přehledu projektu z&nbsp;31.&nbsp;července to popsal člen recenzního týmu vystupující jako Just Perfection: většina takových balíčků opakuje přesně tytéž špatné postupy, a&nbsp;tím zdržuje posuzování všem ostatním.</p>
<p>Odpovědí není nový filtr ani zákaz. Je jí dokument psaný pro stroje. Příspěvek <a href="https://blogs.gnome.org/jrahmatzadeh/2026/07/27/ego-ai-reference/" rel="noopener">An Open Letter to AI for Generating GNOME Shell Extensions</a> vyšel 27.&nbsp;července na blogu Javada Rahmatzadeha a&nbsp;hned první věta říká, proč vznikl: protože prohledávače pro jazykové modely blogy GNOME indexují, má text sloužit jako veřejná reference a&nbsp;měřítko pro modely, které kód rozšíření generují. O&nbsp;den později se jeho obsah objevil v&nbsp;oficiální dokumentaci projektu jako stránka <a href="https://gjs.guide/extensions/review-guidelines/best-practices.html" rel="noopener">Best Practices</a>; commit, který ji do repozitáře gjs-guide přidal, nese datum 28.&nbsp;července.</p>
<figure><img src="/uploads/foto-m2-gnome-ego-slop-71237b0b.jpg" alt="Přehledová plocha GNOME Shellu s otevřenými okny a dokem"><figcaption>Přehledová plocha GNOME Shellu s&nbsp;otevřeným prohlížečem, počasím a&nbsp;správcem souborů. Rozšíření zasahují právě do téhle vrstvy prostředí. Foto: Guilieb, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>
<h2>Seznam zlozvyků, ne obecné rady</h2>
<p>Dokument je stavěný jako dvojice: špatný tvar a&nbsp;vedle něj správný. Nejčastější položkou je zbytečný blok <code>try-catch</code> kolem volání, které za normálního běhu výjimku nevyhodí. Metody jako <code>destroy()</code>, <code>connect()</code>, <code>disconnect()</code> nebo <code>GLib.Source.remove()</code> podle dokumentu neošetřené výjimky neháží, takže je nemá smysl obalovat:</p>
<pre><code class="language-javascript">// spatne
if (this._sourceId) {
    try {
        GLib.Source.remove(this._sourceId);
    } catch (e) {
    }
    this._sourceId = null;
}

// spravne
if (this._sourceId) {
    GLib.Source.remove(this._sourceId);
    this._sourceId = null;
}</code></pre>
<p>Druhá opakovaná vada jsou obranné kontroly, které nemají co kontrolovat: volání přes <code>?.()</code> nebo test <code>typeof</code> u&nbsp;metod, které v&nbsp;dané třídě prokazatelně jsou. Dokument u&nbsp;toho rovnou pojmenovává příčinu. Modely se snaží napsat kód, který poběží na několika verzích GNOME Shellu naráz, a&nbsp;tyhle kontroly jsou vedlejším produktem té snahy. Návod žádá opak: cílit na jednu verzi a&nbsp;při skutečné potřebě sáhnout po samostatném průvodci portováním.</p>
<p>Zbytek seznamu má stejný ráz. Žádné příznaky typu <code>this._destroyed</code>, které mají hlídat pořadí volání; místo připojení signálu <code>destroy</code> se má rovnou přepsat stejnojmenná metoda; ikony patří do <code>Gtk.Image</code> a&nbsp;<code>St.Icon</code>, ne do znaků emoji; ukazatel průběhu se skládá z&nbsp;widgetu, ne z&nbsp;řetězce blokových znaků. Řádek smí mít nejvýš 200 znaků, aby recenzent nemusel v&nbsp;prohlížeči rolovat do strany. A&nbsp;komentáře, které jen převádějí kód řádek po řádku do věty, jsou zakázané.</p>
<h2>Značka, kterou si má model napsat sám</h2>
<p>Jeden bod se od zbytku liší, protože nemluví o&nbsp;kódu, ale o&nbsp;odpovědnosti. Vydat rozšíření na EGO je podle dokumentu závazek, že ho bude někdo pro uživatele udržovat. Kdo neumí JavaScript číst a&nbsp;ladit, má si vygenerovaný balíček nechat na svém počítači. A&nbsp;model má tuhle podmínku připomenout sám: do generovaných souborů má vložit komentář.</p>
<pre><code class="language-javascript">// Generated with AI for personal use.
// Do NOT upload to extensions.gnome.org (EGO) unless you understand JavaScript
// and can maintain this code.</code></pre>
<h2>Zákaz v&nbsp;recenzních pokynech je o&nbsp;půl roku starší</h2>
<p>Samotné pravidlo z&nbsp;minulého týdne není. Oddíl <a href="https://gjs.guide/extensions/review-guidelines/review-guidelines.html" rel="noopener">Extensions must not be AI-generated</a> přibyl do recenzních pokynů 30.&nbsp;listopadu 2025. AI jako pomůcku při učení nebo doplňování kódu nezakazuje; požaduje, aby autor uměl odůvodnit a&nbsp;vysvětlit, co poslal. Odmítnout se mají balíčky s&nbsp;velkým množstvím zbytečného kódu, nejednotným stylem, voláním neexistujícího rozhraní nebo s&nbsp;komentáři, které jsou vlastně zadáním pro model.</p>
<p>Týden nato, 6.&nbsp;prosince 2025, to Rahmatzadeh <a href="https://blogs.gnome.org/jrahmatzadeh/2025/12/06/ai-and-gnome-shell-extensions/" rel="noopener">popsal na blogu z&nbsp;druhé strany</a>. Přibývání zbytečných bloků <code>try-catch</code> ho zarazilo, tak se autorů zeptal, odkud se berou, a&nbsp;dostal odpověď, že z&nbsp;AI. V&nbsp;témže textu psal, že některé dny stráví posuzováním přes šest hodin a&nbsp;projde přes 15&nbsp;000 řádků kódu. Jednou zavedený zlozvyk se podle něj šíří jako domino a&nbsp;objevuje se v&nbsp;dalších balíčcích.</p>
<h2>Že to zabere, nikdo doložit neumí</h2>
<p>Celá konstrukce stojí na předpokladu, který zvenčí ověřit nejde: že prohledávače stránku načtou a&nbsp;modely se podle ní zařídí. Nikdo nezveřejňuje, co který model z&nbsp;indexovaných stránek do svých odpovědí promítne, takže úspěch se pozná jedině tak, že recenzentům ubude práce. Podle nás je to spíš pokus než opatření.</p>
<p>Skeptický je i&nbsp;sám autor, jen v&nbsp;jiné věci. V&nbsp;prosincové diskusi pod svým příspěvkem odepsal čtenáři, který žádal, aby se rozšíření označovala štítkem podle toho, jestli u&nbsp;nich pomáhala AI: štítkovat se to podle něj snadno nedá, protože modely se učí a&nbsp;zbytečné řádky, které jsou dnes nápadné, nemusí být poznat příště. Text z&nbsp;27.&nbsp;července s&nbsp;tím počítá. Nesnaží se generovaný kód poznat, snaží se ovlivnit, jak vypadá.</p>
<p>Pravidla si projekt v&nbsp;posledních týdnech přepsal i&nbsp;jinde: bezpečnostní chyby nahlášené GNOME se od 1.&nbsp;srpna <a href="/clanek/gnome-lhuta-30-dni">zveřejňují po třiceti dnech místo po devadesáti</a>.</p>
<p>Stránka Best Practices nabízí i&nbsp;syrovou verzi v&nbsp;Markdownu ke stažení, aby šla nástroji předat jako soubor s&nbsp;pokyny. To je z&nbsp;celé věci ta nejpraktičtější část: kdo si rozšíření nechává generovat, může návod modelu podstrčit sám a&nbsp;nespoléhat na to, že ho prohledávač najde dřív.</p>
<p>Zdroje: blog Javada Rahmatzadeha z&nbsp;<a href="https://blogs.gnome.org/jrahmatzadeh/2026/07/27/ego-ai-reference/" rel="noopener">27.&nbsp;července 2026</a> a&nbsp;<a href="https://blogs.gnome.org/jrahmatzadeh/2025/12/06/ai-and-gnome-shell-extensions/" rel="noopener">6.&nbsp;prosince 2025</a>, dokumentace <a href="https://gjs.guide/extensions/review-guidelines/best-practices.html" rel="noopener">gjs.guide</a>, <a href="https://thisweek.gnome.org/posts/2026/07/twig-260/" rel="noopener">týdenní přehled projektu z&nbsp;31.&nbsp;července</a> a&nbsp;historie repozitáře gjs-guide, kterou bez přihlášení vydá REST API GitLabu; jeho webové rozhraní odpovídá robotům kódem 406.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-gnome-ego-slop-71237b0b.jpg" length="50192" type="image/jpeg" />
		</item>
		<item>
			<title>Linker v Binutils 2.47 umí stupeň optimalizace nula, 32bitový s390 chce přepínač navíc</title>
			<link>https://tech-blog.chatujme.cz/clanek/binutils-2-47-linker-optimalizace-nula</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/binutils-2-47-linker-optimalizace-nula</guid>
			<pubDate>Sat, 01 Aug 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[GNU Binutils 2.47 vyšlo 26. července. Linkeru <code>ld</code> přibyl stupeň optimalizace nula: vypne slučování shodného obsahu v sekcích, takže linkování je rychlejší a výsledný soubor větší. Podpora 32bitového s390 je označená za zastaralou a bez zvláštního přepínače se sada pro tento cíl vůbec nenakonfiguruje.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-binutils-2-47-116cca90.jpg" alt="Vytištěný výpis programu v assembleru pro procesor Motorola 6800"><figcaption>Výpis v&nbsp;assembleru pro osmibitový procesor Motorola&nbsp;6800. Assembler <code>gas</code> ze sady Binutils dělá dnes touž práci pro desítky architektur. Foto: Michael Holley, Wikimedia Commons (volné dílo)</figcaption></figure>

<p>GNU Binutils je sada, bez které se na Linuxu nepřeloží skoro nic: assembler <code>gas</code>, linker <code>ld</code> a&nbsp;nástroje na čtení objektových souborů, mezi nimi <code>objdump</code> a&nbsp;<code>readelf</code>. Vydání 2.47 <a href="https://lists.gnu.org/archive/html/info-gnu/2026-07/msg00006.html" target="_blank" rel="noopener">oznámil</a> 26.&nbsp;července Nick&nbsp;Clifton, hlavní správce projektu. Balíky na <a href="https://ftp.gnu.org/gnu/binutils/" target="_blank" rel="noopener">ftp.gnu.org</a> nesou totéž datum.</p>

<h2>Linkování se dá zrychlit tím, že se práce ubere</h2>

<p>Nejnápadnější změna je v&nbsp;linkeru. Překladač označuje některé sekce jako slučitelné: typicky tam leží řetězcové konstanty a&nbsp;podobná data, u&nbsp;kterých nevadí, když se dvě shodné kopie sloučí v&nbsp;jednu. Linker takové sekce prochází, hledá v&nbsp;nich duplicity a&nbsp;výsledek tím zmenšuje. Stojí ho to čas.</p>

<p>Binutils 2.47 dovoluje tuhle práci vypnout. Nový stupeň optimalizace <code>-O 0</code> u&nbsp;linkeru BFD podle <a href="https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=ld/NEWS;hb=refs/tags/binutils-2_47" target="_blank" rel="noopener">poznámek k&nbsp;vydání linkeru</a> zastaví slučování obsahu slučitelných sekcí, což „může výrazně zrychlit proces linkování za&nbsp;cenu větších binárek“ (přeloženo z&nbsp;angličtiny). O&nbsp;kolik, projekt neuvádí, a&nbsp;závisí to na tom, kolik takových dat program má.</p>

<p>Komu se to hodí, je vidět z&nbsp;povahy věci: při vývoji se linkuje pořád dokola a&nbsp;na velikosti výsledku většinou nezáleží. To už je naše hodnocení, v&nbsp;poznámkách žádné doporučení není.</p>

<h2>Hromada objektových souborů, která se tváří jako archiv</h2>

<p>Druhá novinka linkeru jsou volby <code>--start-lib</code> a&nbsp;<code>--end-lib</code> plus příkaz <code>LIB</code> ve skriptu linkeru. Objektové soubory mezi nimi se berou jako členové umělého archivu, tedy jako soubor <code>.a</code>, který nikdy nevznikl. Rozdíl proti obyčejnému výčtu souborů je v&nbsp;tom, že z&nbsp;archivu linker vytáhne jen to, na co se někdo odkazuje.</p>

<p>Není to nápad z&nbsp;tohoto vydání. Tytéž volby zná linker <code>lld</code> z&nbsp;LLVM, v&nbsp;jehož <a href="https://github.com/llvm/llvm-project/blob/main/lld/docs/ld.lld.1" target="_blank" rel="noopener">manuálové stránce</a> stojí, že jde o&nbsp;skupinu objektů, se kterou se zachází, jako by byly společně v&nbsp;archivu. Binutils si tím doplňuje kus rozhraní, na který jsou překladové systémy zvyklé odjinud.</p>

<p>K&nbsp;archivům patří ještě jedna změna: <code>ld</code> nově zpracuje i&nbsp;archiv bez rejstříku symbolů, a&nbsp;to ve všech formátech, ne jen v&nbsp;XCOFF. Chování je ve výchozím stavu zapnuté a&nbsp;vypíná se volbou <code>--no-link-mapless</code>.</p>

<h2>Assembler: RISC-V přibývá, Arm dvě rozšíření stahuje</h2>

<p>Assembler dostal volbu <code>--reloc-section-sym</code> se třemi hodnotami (<code>all</code>, <code>internal</code>, <code>none</code>). Řídí, jestli se relokace odkazující na lokální symboly přepíšou na symboly sekcí.</p>

<p>Delší je seznam nových rozšíření RISC-V. Ze standardních přibyla <code>zalasr</code>, <code>svrsw60t59b</code>, <code>zvabd</code> a&nbsp;<code>smpmpmt</code> ve verzi 1.0 a&nbsp;k&nbsp;tomu řada vektorových rozšíření se jmény začínajícími na <code>zvqw</code>, <code>zvfw</code> a&nbsp;<code>zvfb</code>; z&nbsp;dodavatelských pak <code>xsmtvdot</code> a&nbsp;<code>xsmtvdotii</code> od firmy SpacemiT. Úplný výčet je v&nbsp;<a href="https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=gas/NEWS;hb=refs/tags/binutils-2_47" target="_blank" rel="noopener">poznámkách assembleru</a>.</p>

<p>Opačným směrem jde Arm. Rozšíření TME a&nbsp;MPAMv2_VID se podle týchž poznámek nikdy neobjevila v&nbsp;žádném výrobku a&nbsp;Arm je z&nbsp;architektury stáhl; assembler na jejich instrukce a&nbsp;systémové registry nově upozorní varováním a&nbsp;podvolba <code>+mpamv2</code> zmizela. Za&nbsp;zastaralé jsou označené i&nbsp;direktivy <code>.vtable_entry</code> a&nbsp;<code>.vtable_inherit</code>, které byly potřeba pro překladače GCC starší než 3.0.</p>

<h2>Objdump ukáže, kde jsou globální proměnné</h2>

<p>Nástroj <code>objdump</code> umí nově volbu <code>--map-global-vars</code>, která vypíše umístění a&nbsp;typ globálních proměnných v&nbsp;objektovém souboru. Poznámky k&nbsp;vydání u&nbsp;ní jmenují autora, Guillauma Vacheriase.</p>

<p>Spolu s&nbsp;<code>readelf</code> přijal <code>objdump</code> také volbu <code>--debug-dir</code>, kterou se dá říct, kde hledat oddělené soubory s&nbsp;ladicími informacemi. Rozklad instrukcí pro AArch64 zná navíc <code>-M annotate</code>, který u&nbsp;nedefinovaných instrukcí ukáže odpovídající symbol; na x86 a&nbsp;x86-64 dělá totéž u&nbsp;přímých operandů <code>-M annotate-immediates</code>.</p>

<h2>Pro 32bitový s390 už překlad sám od sebe neproběhne</h2>

<p>Podpora 32bitového cíle s390 je označená za&nbsp;zastaralou a&nbsp;počítá se s&nbsp;jejím odstraněním. Konfigurační skript na takový cíl <a href="https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=binutils/NEWS;hb=refs/tags/binutils-2_47" target="_blank" rel="noopener">hlásí chybu</a>, kterou lze přebít volbou <code>--enable-obsolete</code>. Šedesátičtyřbitový s390x zůstává podporovaný beze změny.</p>

<p>Binutils v&nbsp;tom nejdou první. Podle týchž poznámek odstranilo jádro Linuxu 6.19 podporu 32bitové kompatibility s390 a&nbsp;knihovna glibc 2.43 i&nbsp;GCC 16.1 tenhle cíl označily za&nbsp;zastaralý s&nbsp;úmyslem ho v&nbsp;budoucnu vypustit. Ve stejném duchu se u&nbsp;rodiny H8 mění výchozí architektura z&nbsp;H8/300 na H8/300H, protože podpora té starší zmizela z&nbsp;GCC už v&nbsp;roce&nbsp;2020.</p>

<h2>Liché číslo znamená bez GOLDu</h2>

<p>Oznámení připomíná pravidlo, které nováčka zaskočí: protože jde o&nbsp;liché vydání, zdrojové texty linkeru GOLD v&nbsp;balíku <strong>nejsou</strong>. Kdo je potřebuje, musí sáhnout po sudé verzi nebo přímo do repozitáře.</p>

<p>Archivy se zdrojovými texty jsou přitom sestavené tak, aby šly sestavit znovu se stejným výsledkem: skript <code>src-release.sh</code> soubory seřadí a&nbsp;předá <code>tar</code>u&nbsp;pevné datum, které se bere z&nbsp;posledního commitu souboru <code>bfd/version.m4</code>. Kdo si chce ověřit, že stažený archiv odpovídá zdrojovému stromu, má tím pádem z&nbsp;čeho vyjít.</p>

<p>K&nbsp;běžnému uživateli se novinky dostanou přes distribuce, které si sadu přebalují samy; na vydání samotné je vázaný jen ten, kdo si toolchain překládá. O&nbsp;vydání psal také <a href="https://www.phoronix.com/news/GNU-Binutils-2.47" target="_blank" rel="noopener">Phoronix</a>, který si všímá, že týž víkend vyšla i&nbsp;knihovna GNU C Library 2.44.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-binutils-2-47-116cca90.jpg" length="56030" type="image/jpeg" />
		</item>
		<item>
			<title>Dependabot čeká s novou verzí tři dny, u bezpečnostních oprav ale ne</title>
			<link>https://tech-blog.chatujme.cz/clanek/dependabot-cooldown-tri-dny</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/dependabot-cooldown-tri-dny</guid>
			<pubDate>Sat, 01 Aug 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Napadená verze balíčku bývá v registru odhalená během hodin. Automatický nástroj ji ale stihne nabídnout k sloučení dřív. GitHub proto od 23. července 2026 nechává Dependabota u běžných aktualizací verzí tři dny čekat. Na opravy hlášených zranitelností se čekání nevztahuje.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-dependabot-cooldown-d1acf588.jpg" alt="Kancelář GitHubu se stoly a monitory"><figcaption>Kancelář GitHubu. Dependabot je jeho nástroj na hlídání závislostí. Foto: DaveFayram, Flickr (CC BY 2.0)</figcaption></figure>

<p>Nástroj, který otevře žádost o&nbsp;sloučení hned, jak vyjde nová verze knihovny, dělá útočníkovi službu. Napadené vydání někdo obvykle odhalí během hodin, jenže to je pořád dost času na to, aby se stihlo dostat do cizích projektů. GitHub proto <a href="https://github.blog/security/supply-chain-security/the-case-for-a-cooldown-why-dependabot-now-waits-before-issuing-version-updates/" rel="noopener">oznámil 23.&nbsp;července 2026</a>, že jeho Dependabot napříště tři dny počká, než novou verzi nabídne.</p>

<h2>Dvě různé práce jednoho nástroje</h2>

<p>Dependabot dělá dvě věci, které se snadno pletou. Bezpečnostní aktualizace reaguje na vydaný záznam o&nbsp;zranitelnosti: přijde upozornění a&nbsp;s&nbsp;ním žádost o&nbsp;sloučení, která projekt posune na opravenou verzi. Aktualizace verzí naproti tomu jen drží závislosti aktuální bez ohledu na to, jestli je se stávající verzí něco v&nbsp;nepořádku.</p>

<p>Čekání platí výhradně na to druhé. <a href="https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference#cooldown" rel="noopener">Dokumentace</a> to popisuje jako výchozí chování: tři dny se uplatní, i&nbsp;když volbu <code>cooldown</code> nikdo v&nbsp;souboru <code>dependabot.yml</code> nenastavil, a&nbsp;na bezpečnostní aktualizace se nevztahují. GitHub to zdůvodňuje tím, že by šlo o&nbsp;zdržení opravy vady, která je už veřejná.</p>

<p>Samotná volba nová není. Podle <a href="https://nesbitt.io/2026/03/04/package-managers-need-to-cool-down.html" rel="noopener">přehledu</a>, který v&nbsp;březnu 2026 sepsal Andrew Nesbitt, dostal Dependabot blok <code>cooldown</code> už v&nbsp;červenci 2025. Změna je v&nbsp;tom, že se čekání nově uplatní i&nbsp;u&nbsp;projektů, které si o&nbsp;ně neřekly.</p>

<h2>Případ, na kterém to GitHub vysvětluje</h2>

<p>V&nbsp;září 2025 vylákal útočník podvodným e-mailem přihlašovací údaje jednoho správce v&nbsp;registru <a href="/clanek/npm-12-instalacni-skripty-import">npm</a> a&nbsp;vydal upravené verze balíčků chalk, debug a&nbsp;zhruba tuctu dalších. Dohromady mají přes dvě miliardy stažení týdně. Vložený kód přepisoval v&nbsp;prohlížeči adresy kryptoměnových peněženek.</p>

<p>Jak dlouho byly ty verze v&nbsp;registru, se v&nbsp;pramenech liší. GitHub píše o&nbsp;zhruba dvou hodinách, bezpečnostní inženýr William Woodruff uvádí ve <a href="https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns" rel="noopener">svém rozboru</a> u&nbsp;balíčku chalk „méně než dvanáct hodin“. Ani jeden z&nbsp;nich neuvádí, od čeho a&nbsp;po co přesně měří, takže rozdíl rozhodnout nejde. Na tom podstatném to nic nemění: automatický nástroj se do takového okna vejde i&nbsp;v&nbsp;té kratší podobě.</p>

<h2>Kolik dní je dost</h2>

<p>Tady se GitHub rozchází s&nbsp;lidmi, od kterých ten nápad pochází. Woodruff sestavil tabulku deseti známých případů a&nbsp;u&nbsp;každého odhadl, jak dlouho byla napadená verze dostupná. Osm z&nbsp;deseti mělo okno kratší než týden, takže sedmidenní čekání by podle něj většinu z&nbsp;nich zastavilo, čtrnáctidenní všechny kromě jediného. Tím jediným je xz-utils s&nbsp;oknem asi pět týdnů.</p>

<p>Táž tabulka ale ukazuje i&nbsp;případy, na které tři dny nestačí nebo je stačí jen tak tak: útok na tj-actions v&nbsp;ní má okno tři dny a&nbsp;napadený Kong Ingress Controller zhruba deset. GitHub svoji hranici obhajuje jinou sadou dat, totiž přehledem 21&nbsp;široce popsaných útoků z&nbsp;let 2018 až 2026, a&nbsp;odůvodňuje ji tím, že tři dny jsou kompromis: dost na většinu útoků, ne tak dlouho, aby závislosti zbytečně zastarávaly.</p>

<p>Ostatní nástroje se rozhodly různě. Nesbitt uvádí, že Snyk má napevno zabudovaných 21&nbsp;dní bez možnosti nastavení, kdežto Mend v&nbsp;Renovate&nbsp;42 udělal tři dny výchozí hodnotou pro balíčky npm ve svém doporučeném nastavení. Samotný <a href="https://docs.renovatebot.com/key-concepts/minimum-release-age/" rel="noopener">Renovate</a> tuhle vlastnost zná léta pod jménem <code>minimumReleaseAge</code>, dřív <code>stabilityDays</code>, a&nbsp;jako příklad v&nbsp;dokumentaci uvádí čtrnáct dní.</p>

<h2>Osmnáct nových škodlivých balíčků npm denně</h2>

<p>Proč se tím vůbec někdo zabývá, ukazují čísla z&nbsp;databáze bezpečnostních hlášení, kterou GitHub vede. Za rok končící květnem 2026 v&nbsp;ní přibylo přes 6&nbsp;500 hlášení o&nbsp;škodlivém kódu v&nbsp;npm, o&nbsp;rok dřív jich bylo kolem 6&nbsp;200. To je zhruba osmnáct nově zachycených balíčků každý den.</p>

<h2>Proti čemu čekání nepomůže</h2>

<p>GitHub v&nbsp;oznámení sám vypisuje, co tímhle opatřením neošetří: zadní vrátka, která útočník do vydání vloží a&nbsp;nechá spát, sabotáž samotného správce projektu a&nbsp;napadený systém pro sestavení balíčku. Právě sem patří xz-utils, jehož okno Woodruff odhaduje na pět týdnů; na tak dlouhou lhůtu nedosáhne ani Snyk se svými jednadvaceti dny. Čekání je stavěné na jeden konkrétní vzorec, kdy se napadená verze vydá, rychle rozšíří a&nbsp;rychle odhalí.</p>

<p>Jako doplněk GitHub jmenuje připínání verzí zámkovým souborem, vypnutí instalačních skriptů v&nbsp;prostředí pro sestavení, omezení oprávnění přístupových tokenů a&nbsp;čtení změn před sloučením.</p>

<h2>Jak si to nastavit jinak</h2>

<p>Kdo chce jinou lhůtu, nastaví ji v&nbsp;bloku <code>cooldown</code>. Položka <code>default-days</code> platí pro závislosti bez vlastního pravidla; u&nbsp;správců balíčků, kteří rozlišují úrovně sémantického verzování, jdou zvlášť nastavit <code>semver-major-days</code>, <code>semver-minor-days</code> a&nbsp;<code>semver-patch-days</code>. Seznamy <code>include</code> a&nbsp;<code>exclude</code> pojmou po 150&nbsp;položkách a&nbsp;přijímají hvězdičku jako zástupný znak; když je balíček v&nbsp;obou, vyhrává <code>exclude</code> a&nbsp;aktualizuje se hned.</p>

<pre><code class="language-yaml">version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7
      exclude:
        - "@nase-firma/*"</code></pre>

<p>Seznam podporovaných správců balíčků je v&nbsp;dokumentaci dlouhý a&nbsp;sahá od Bundleru a&nbsp;Carga přes Gradle, Maven a&nbsp;NuGet až po Terraform a&nbsp;vcpkg. Rozlišování podle úrovně sémantického verzování ale nemají všichni.</p>

<h2>Zbytek ekosystému to má taky</h2>

<p>Dependabot je jen jedno místo, kde se čekání dá zapnout, a&nbsp;podle Nesbittova přehledu ne to první. V&nbsp;JavaScriptu přišel pnpm s&nbsp;volbou <code>minimumReleaseAge</code> v&nbsp;září 2025, Yarn týž měsíc pod jménem <code>npmMinimalAgeGate</code>, Bun v&nbsp;říjnu 2025 a&nbsp;samotné npm v&nbsp;únoru 2026 jako <code>min-release-age</code>. V&nbsp;Pythonu má uv přepínač <code>--exclude-newer</code>, pip od verze 26 <code>--uploaded-prior-to</code>, Poetry vlastní obdobu. Ruby dostalo čekání v&nbsp;Bundleru 4.0.13 začátkem června 2026.</p>

<p>Nesbitt k&nbsp;tomu dodává, že u&nbsp;distribucí jako Debian nebo Fedora by totéž opatření stálo víc, než by přineslo, protože mezi vydáním knihovny a&nbsp;jejím rozšířením u&nbsp;nich stojí člověk, který balíček prohlédne a&nbsp;přebalí. V&nbsp;registrech typu npm nebo PyPI je vydání a&nbsp;rozeslání jeden a&nbsp;týž úkon. Čekání na aktualizaci tedy těmhle ekosystémům dodatečně vyrábí něco na způsob prodlevy, kterou nikdy neměly.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-dependabot-cooldown-d1acf588.jpg" length="68596" type="image/jpeg" />
		</item>
		<item>
			<title>Redis 8.10 umí uložit jména polí v hashi jen jednou, samo se to ale nezapne</title>
			<link>https://tech-blog.chatujme.cz/clanek/redis-8-10-compact-hash-sablony-poli</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/redis-8-10-compact-hash-sablony-poli</guid>
			<pubDate>Fri, 31 Jul 2026 11:37:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Redis vydal 29. července verzi 8.10.0. Hlavní novinkou je uložení, ve kterém klíče se stejnou sadou polí sdílejí jeden seznam jmen místo toho, aby si ho každý nesl zvlášť. Autor změny naměřil na 2 800 000 hashích úsporu kolem 49 %, samo se to ale nezapne: potřebuje buď nový příkaz HIMPORT, nebo nastavení, které je ve výchozím stavu vypnuté.]]></description>
			<content:encoded><![CDATA[<p>Redis vydal <a href="https://github.com/redis/redis/releases/tag/8.10.0" rel="noopener">verzi 8.10.0</a> 29.&nbsp;července jako ostrou, ne jako kandidáta. Oficiální obraz na Docker Hubu se značkou <code>8.10.0</code> je z&nbsp;následujícího dne. Poznámky k&nbsp;vydání jmenují proti řadě 8.8 šestnáct změn, ale první z&nbsp;nich je z&nbsp;jiného soudku než zbytek: nové vnitřní uložení hashů, které se jmenuje compact hash.</p>

<p>Hash je v&nbsp;Redisu tabulka dvojic jméno pole a&nbsp;hodnota, tedy to, do čeho se běžně ukládá jeden uživatel, jedna objednávka nebo jedno sezení. Když jich má aplikace miliony a&nbsp;všechny mají stejná pole, uloží se jméno každého pole tolikrát, kolik je klíčů. U&nbsp;pole <code>email</code> a&nbsp;dvou milionů uživatelů to je dva miliony kopií pěti písmen.</p>

<figure><img src="/uploads/foto-m2-2026-07-31-redis-himport-4c31efef.png" alt="Stránka dokumentace Redisu s popisem nového příkazu HIMPORT"><figcaption>Snímek: dokumentace nového příkazu HIMPORT na webu Redisu, řádek „Available since“ u&nbsp;ní uvádí 8.10.0. Vlastní snímek obrazovky (31. 7. 2026)</figcaption></figure>

<h2>Jména polí se uloží do šablony a&nbsp;klíč si nese jen odkaz</h2>

<p>Nové kódování zavádí šablonu: neměnný seznam jmen polí, který leží v&nbsp;paměti jednou a&nbsp;odkazuje se na něj každý klíč se stejnou sadou polí. Klíč si pak drží už jen své hodnoty. Redis šablony zakládá, sdílí a&nbsp;uvolňuje sám, aplikace o&nbsp;nich neví a&nbsp;všechny dosavadní příkazy nad hashem se chovají stejně jako dřív.</p>

<p>Jména polí jsou v&nbsp;šabloně seřazená (nejdřív podle délky, pak po bajtech), takže se index pole hledá půlením. Vedle jmen má šablona ještě malé pořadové číslo a&nbsp;klíč si nese právě to, ne osmibajtový ukazatel; komentář ve zdrojovém kódu <code>t_hash.c</code> uvádí, že odkaz na šablonu tak vyjde i&nbsp;na zhruba dva bajty. Kódování jsou dvě, <code>template-listpack</code> pro malé hashe a&nbsp;<code>template-array</code> pro ty, které se do listpacku nevejdou. Obě vypíše příkaz <a href="https://redis.io/docs/latest/commands/object-encoding/" rel="noopener">OBJECT ENCODING</a>. Jeho vlastní stránka v&nbsp;dokumentaci je ale 31.&nbsp;července u&nbsp;hashů pořád neuvádí a&nbsp;končí u&nbsp;listpacku.</p>

<h2>Nový příkaz HIMPORT posílá jména polí jednou za celou dávku</h2>

<p>Druhá novinka je příkaz <a href="https://redis.io/docs/latest/commands/himport/" rel="noopener">HIMPORT</a> na hromadné plnění. Klient si nejdřív pojmenuje sadu polí a&nbsp;pak už posílá jen hodnoty:</p>

<pre><code class="language-bash">HIMPORT PREPARE u name email age
HIMPORT SET user:1 u alice a@example.com 30
HIMPORT SET user:2 u bob b@example.com 25</code></pre>

<p>Sada polí patří jedinému spojení. Ostatní klienti ji nevidí a&nbsp;zmizí, jakmile se spojení zavře nebo klient pošle <code>RESET</code>. Proti volání <code>HSET</code> pro každý klíč tím ubude provozu po síti i&nbsp;práce na straně serveru, a&nbsp;Redis si navíc z&nbsp;toho, že všechny klíče sdílejí jednu sadu polí, vezme pokyn uložit je rovnou v&nbsp;novém kódování.</p>

<h2>Čísla jsou z&nbsp;jednoho běhu na jednom stroji</h2>

<p>Kolik to ušetří, uvádí <a href="https://github.com/redis/redis/pull/15364" rel="noopener">popis změny</a> na jednom měření jejího autora. Sada měla 2&nbsp;800&nbsp;000 hashů nad stovkou různých sad polí, každý hash 20 až 50 polí (v&nbsp;průměru zhruba 34), jméno pole průměrně 13 bajtů a&nbsp;hodnota také 13 bajtů. Obyčejné hashe zabraly 3,49&nbsp;GB, tytéž v&nbsp;novém kódování 1,77&nbsp;GB, tedy asi o&nbsp;49&nbsp;% méně.</p>

<p>Je to vlastní běh autora změny, ne nezávislé měření, a&nbsp;jeho výsledek závisí na tom, jak velkou část klíče tvoří jména polí. Popis to říká rovnou: nejvíc ušetří klíče s&nbsp;krátkými hodnotami, protože u&nbsp;nich jsou opakovaná jména polí většina objemu. U&nbsp;klíče s&nbsp;jednou dlouhou hodnotou je úspora malá.</p>

<h2>Co za to</h2>

<p>Šablona je neměnná. Když se do hashe přidá nové pole nebo se jedno smaže, šablona se neupraví – klíč se přesune k&nbsp;jiné, kterou Redis buď najde v&nbsp;registru, nebo pro něj vyrobí. Provoz, který jména polí často mění, tak za úsporu paměti platí hledáním a&nbsp;zakládáním šablon při každém takovém zápisu. Čtení a&nbsp;přepis hodnoty existujícího pole zůstávají stejně rychlé jako dřív.</p>

<p>Změna je navíc jednosměrná: jakmile klíč přejde na šablonu, zůstane u&nbsp;ní po celý svůj život. Mezi šablonami se stěhuje podle toho, jak se mění sada polí, ale zpátky na obyčejný hash se nevrátí. Jedinou výjimkou je vypršení jednotlivých polí – <code>HEXPIRE</code> nad takovým klíčem ho převede zpět na obyčejný hash a&nbsp;úspora je pryč. Hashe, které vypršení polí používají, se do šablony nepřevádějí vůbec.</p>

<p>Poslední rozdíl se týká procházení. <code>HSCAN</code> vrátí u&nbsp;klíče v&nbsp;novém kódování všechna pole naráz a&nbsp;kurzor rovnou nulový. Klientovi, který cyklí do nuly, to nevadí, ale u&nbsp;velmi širokého hashe dorazí v&nbsp;jedné odpovědi to, co by se dřív rozpadlo do několika dávek.</p>

<h2>Samo se to nezapne</h2>

<p>Automatický převod je vypnutý. Řídí ho pětice nových nastavení v&nbsp;<a href="https://github.com/redis/redis/blob/8.10.0/redis.conf" rel="noopener">redis.conf</a> a&nbsp;všechna mají výchozí hodnotu 0, což u&nbsp;nich znamená „nedělej nic“. Dvě platí pro běžné zápisy: <code>hash-min-template-entries</code> říká, od kolika polí se hash při dalším zápisu převede, <code>hash-max-template-entries</code> pak horní mez, aby se hodně široké hashe do sdíleného registru nedostaly. Změna se projeví líně, tedy až při dalším zápisu do konkrétního klíče, ne v&nbsp;okamžiku, kdy ji správce nastaví.</p>

<p>Zbylá tři nastavení převádějí hashe při načítání RDB souboru a&nbsp;míří na jednorázový přechod ze starších verzí: soubor uložený dřív, než šablony vznikly, se dá při načtení převést, aniž se data přepisují. Na soubor, ve kterém už nějaká šablona je, se neuplatní. K&nbsp;nim patří práh <code>hash-rdb-load-template-disassembly-threshold</code>: šablona, kterou na konci načítání sdílí míň klíčů, než kolik práh žádá, se rozebere zpět na obyčejné hashe, protože by víc paměti spotřebovala, než ušetřila. Týž práh slouží i&nbsp;jako pojistka – jakmile vznikne aspoň tisíc šablon a&nbsp;víc než polovina z&nbsp;nich je pod prahem, Redis uprostřed načítání nové šablony zakládat přestane a&nbsp;zbytek dat nechá tak, jak je.</p>

<h2>Kolik toho šablony zabírají, hlásí INFO</h2>

<p>Kolik šablon server drží a&nbsp;kolik klíčů na nich visí, hlásí <code>INFO stats</code> v&nbsp;položkách <code>hash_templates</code> a&nbsp;<code>hash_template_keys</code>. Kolik paměti šablony zabírají dohromady, uvádí <code>INFO memory</code> jako <code>used_memory_hash_templates</code>. Příkaz <code>MEMORY USAGE</code> k&nbsp;paměti jednoho klíče připočte jeho podíl na sdílené šabloně, rozpočítaný rovným dílem mezi všechny klíče, které ji používají.</p>

<p>Ostatní body seznamu se týkají jednotlivých příkazů. <code>LMOVEM</code> a&nbsp;<code>BLMOVEM</code> přesunou mezi seznamy víc prvků najednou, <code>SUNIONCARD</code> a&nbsp;<code>SDIFFCARD</code> vrátí počet prvků sjednocení a&nbsp;rozdílu množin, aniž je posílají, <code>XREAD</code> a&nbsp;<code>XREADGROUP</code> umí novými parametry <code>MAXCOUNT</code> a&nbsp;<code>MAXSIZE</code> omezit velikost odpovědi, přibyl příkaz <code>BACKUP</code> pro zálohu nad vícedílným AOF a&nbsp;servery mezi sebou se nově dokážou ověřit certifikátem protistrany v&nbsp;TLS. Sedm zbylých bodů patří vyhledávacímu a&nbsp;časovému modulu: výpis aliasů indexu, stemmery pro malajštinu a&nbsp;tagalog, rozšíření JSONPath a&nbsp;čtyři změny nad časovými řadami. Poslední položkou seznamu je obecné „zrychlení“ bez podrobností.</p>

<p>Zdroje: <a href="https://github.com/redis/redis/releases/tag/8.10.0" rel="noopener">poznámky k&nbsp;vydání 8.10.0</a>, <a href="https://github.com/redis/redis/pull/15364" rel="noopener">popis a&nbsp;rozprava k&nbsp;změně 15364</a>, <a href="https://github.com/redis/redis/blob/8.10.0/redis.conf" rel="noopener">konfigurační soubor ve značce 8.10.0</a>, <a href="https://redis.io/docs/latest/commands/himport/" rel="noopener">dokumentace příkazu HIMPORT</a> a&nbsp;<a href="https://hub.docker.com/_/redis" rel="noopener">oficiální obraz na Docker Hubu</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-2026-07-31-redis-himport-4c31efef.png" length="131851" type="image/png" />
		</item>
		<item>
			<title>Nový technický web dává do RSS celé články, ale neuvádí autora ani kontakt</title>
			<link>https://tech-blog.chatujme.cz/clanek/magazin2-41-clanku-bez-tiraze</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/magazin2-41-clanku-bez-tiraze</guid>
			<pubDate>Fri, 31 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Na adrese magazin2.chatujme.cz běží český web o technice. Kanál RSS na něm nese celé texty a hlavičky serveru mají přísnou politiku obsahu. Chybí naopak tiráž, jméno autora i kontakt a v diskusi zatím není jediný příspěvek.]]></description>
			<content:encoded><![CDATA[<p>Na adrese <a href="https://magazin2.chatujme.cz/" rel="noopener">magazin2.chatujme.cz</a> běží český web o&nbsp;technice, který si říká Magazín 2. Vyšlo na něm zatím 41 článků, takže se dá docela dobře změřit, co umí a&nbsp;co v&nbsp;něm chybí.</p>

<figure><img src="/uploads/foto-magazin2-uvodni-strana-aed8628b.png" alt="Úvodní strana webu Magazín 2 s vedoucím článkem a postranním panelem rubrik"><figcaption>Úvodní strana webu Magazín 2. Snímek: magazin2.chatujme.cz, vlastní snímek obrazovky (31.&nbsp;července 2026)</figcaption></figure>

<h2>Osm rubrik a&nbsp;vyrovnané délky</h2>

<p>Sitemapa webu obsahovala 31.&nbsp;července ráno 51 adres: úvodní stranu, osm rubrikových výpisů, 41 článků a&nbsp;jednu jedinou další stránku. Kromě rubrikových výpisů tedy web žádnou další stránku nemá – ani kontaktní, ani o&nbsp;webu.</p>

<p>Rubrik je osm a&nbsp;čísla u&nbsp;nich má web vypsaná v&nbsp;postranním panelu. Nejvíc, deset článků, má Programování, šest Vesmír, po pěti Bezpečnost, Internet a&nbsp;sítě a&nbsp;Počítače, po čtyřech Technologie a&nbsp;Věda a&nbsp;nejméně, tři, mají Auta. Součet dává 42, tedy o&nbsp;jedna víc, než kolik je článků. Jde o&nbsp;zprávu o&nbsp;normě SPHBM4 pro paměti HBM, kterou web zařadil do Technologií i&nbsp;do Počítačů zároveň; ostatní články mají rubriku jednu.</p>

<p>Délkou jsou články vyrovnané. Když se z&nbsp;kanálu RSS odstraní značky a&nbsp;rozbalí entity, má nejkratší z&nbsp;nich 3&nbsp;655 znaků, prostřední 5&nbsp;502 a&nbsp;nejdelší 6&nbsp;737. Žádná krátká zpráva o&nbsp;třech větách mezi nimi není.

<p>Výpis se dá řadit trojicí přepínačů: Trending, Nejnovější a&nbsp;Nejčtenější. Na stránce je dvanáct článků a&nbsp;stránky jsou čtyři. Hledání je fulltextové a&nbsp;funguje i&nbsp;na text uvnitř článků: dotaz „DNS“ vrátil tři záznamy. Vpravo nahoře je přepínač světlého a&nbsp;tmavého motivu.</p>

<h2>V&nbsp;RSS je celý text, e-mailem se neposílá nic</h2>

<p>Odběr má web vyřešený netypicky. Místo pole na e-mail stojí v&nbsp;patičce věta, že nové články se odebírají přes RSS a&nbsp;e-mailem se neposílá nic. Kanály jsou dva, RSS i&nbsp;Atom.</p>

<p>Podstatnější je, co v&nbsp;nich je: element <code>content:encoded</code> nese <strong>celý text článku včetně odkazů</strong>, ne jen upoutávku. Soubor RSS má proto přes 350&nbsp;kB a&nbsp;čtenář ve čtečce dostane všechno, aniž by musel na web. Je to volba proti vlastní návštěvnosti: kdo čte ve čtečce, na stránku nedojde.</p>

<p>Jméno autora v&nbsp;kanálu je, jenže je u&nbsp;všech článků stejné a&nbsp;je to jméno webu. Ani jeden ze 41 článků nemá podepsaného člověka.</p>

<h2>Čím je to postavené</h2>

<p>Jediná nečlánková stránka na webu je <a href="https://magazin2.chatujme.cz/stranka/o-magazinu" rel="noopener">O&nbsp;magazínu</a> a&nbsp;je na ní jedna věta: „Zkušební instalace odlehčeného CMS nad SvelteKitem a&nbsp;SQLite.“ Nic víc tam není. SvelteKit potvrzují i&nbsp;cesty ke skriptům a&nbsp;hlavička <code>x-sveltekit-page</code>, kterou server posílá u&nbsp;každé stránky. O&nbsp;databázi <a href="/clanek/turso-postgres-rust">SQLite</a> se dá věřit jen tomu prohlášení, zvenčí ji poznat nejde.</p>

<p>Hlavičky odpovědi má web utažené. Politika obsahu má <code>script-src 'self'</code> s&nbsp;jednorázovým klíčem místo obvyklého <code>unsafe-inline</code>, dále <code>object-src 'none'</code>, <code>frame-ancestors 'none'</code>, <code>base-uri 'self'</code> a&nbsp;<code>form-action 'self'</code>. K&nbsp;tomu chodí <code>X-Frame-Options: DENY</code>, <code>X-Content-Type-Options: nosniff</code> a&nbsp;odkazovací politika omezená na původ. Server neprozrazuje ani hlavičkou, na čem běží.</p>

<p>Jedna hlavička ale chybí: <strong>Strict-Transport-Security</strong>. Bez ní prohlížeč neví, že se na doménu má napříště připojovat rovnou šifrovaně, takže první požadavek po zadání adresy jde nezabezpečeně. U&nbsp;webu, který jinak dbá na politiku obsahu, je to nedůslednost, ne zásadní díra.</p>

<p>Soubor <code>robots.txt</code> zakazuje robotům dvě cesty, <code>/admin</code> a&nbsp;<code>/api</code>, a&nbsp;odkazuje na sitemapu. Ta je vygenerovaná i&nbsp;s&nbsp;obrázky, každý ze 41 článků v&nbsp;ní má vlastní. Stránka se z&nbsp;mého připojení stáhla za necelou desetinu vteřiny a&nbsp;úvodní strana váží 190&nbsp;kB.</p>

<h2>Co na webu není</h2>

<p>Seznam chybějících věcí je delší než seznam stránek. Web nemá <strong>tiráž ani kontakt</strong>: nikde není e-mailová adresa, jméno vydavatele ani formulář. Slova „autor“ a „redakce“ se na úvodní straně sice vyskytnou, ale výhradně uvnitř článků a&nbsp;o&nbsp;cizích lidech. Nikde není napsané, kdo za obsah odpovídá a&nbsp;komu se má hlásit chyba.</p>

<p>Anglická verze neexistuje: adresa <code>/en</code> vrací chybu 404. Chybí i&nbsp;stránka o&nbsp;zpracování osobních údajů, přestože web nabízí registraci a&nbsp;účet s&nbsp;e-mailem.</p>

<p>Diskuse pod články je zapnutá a&nbsp;prázdná. Pod každým článkem stojí „Zatím tu nikdo nediskutuje.“ a&nbsp;psát mohou jen přihlášení; registrace chce jméno do diskuse, e-mail a&nbsp;heslo o&nbsp;osmi znacích a&nbsp;rovnou u&nbsp;ní stojí, že účet slouží jen k&nbsp;psaní příspěvků. Zatím to nikdo nevyužil.</p>

<p>Vidět je i&nbsp;čtenost. Pod datem každého článku svítí počítadlo zhlédnutí a&nbsp;čísla jsou jednociferná: u&nbsp;vzorku článků z&nbsp;31.&nbsp;července tam byly trojky a&nbsp;čtyřky. Vlastní návštěvy při psaní tohohle textu se do nich započítaly taky, takže skutečná čtenost je ještě o&nbsp;něco nižší.</p>

<p>Podle nás je zajímavější než počet článků to, jak jsou postavené. Každý končí odstavcem se zdroji, odkazy vedou na primární dokumenty a&nbsp;nesou <code>rel="noopener"</code>, a&nbsp;názor je v&nbsp;textu označený slovy „podle nás“. Chybějící tiráž to ale sráží: u&nbsp;textu bez podpisu se čtenář nemá koho zeptat, když najde chybu, a&nbsp;doložené zdroje mu to nenahradí.</p>

<p>Zdroje: úvodní strana, stránka <a href="https://magazin2.chatujme.cz/stranka/o-magazinu" rel="noopener">O&nbsp;magazínu</a>, <a href="https://magazin2.chatujme.cz/rss.xml" rel="noopener">kanál RSS</a>, <a href="https://magazin2.chatujme.cz/sitemap.xml" rel="noopener">sitemapa</a> a&nbsp;<a href="https://magazin2.chatujme.cz/robots.txt" rel="noopener">robots.txt</a> webu magazin2.chatujme.cz, čtené 31.&nbsp;července 2026. Hlavičky odpovědi změřeny týž den.</p></p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-magazin2-uvodni-strana-aed8628b.png" length="163164" type="image/png" />
		</item>
		<item>
			<title>Překladač Rustu zrychlil za osm měsíců o 5,6 % a polovinu udělal jediný nástroj</title>
			<link>https://tech-blog.chatujme.cz/clanek/rustc-vykon-cervenec-2026</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/rustc-vykon-cervenec-2026</guid>
			<pubDate>Fri, 31 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Nicholas Nethercote měří rychlost překladače Rustu deset let a jednou za čas sepíše, co se změnilo. Poslední shrnutí vyšlo 31. července: průměrné zkrácení doby překladu 5,59 %, z toho zhruba polovina připadá na dokumentační nástroj. Zajímavější než ta čísla jsou ale dva jednotlivé případy – jeden o prázdných voláních, druhý o osmi bajtech navíc.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-a89-stopky-6064cf19.jpg" alt="Mechanické stopky s bílým ciferníkem"><figcaption>Doba překladu se u&nbsp;rustc měří automaticky při každé sloučené změně. Foto: Ansgar Koreng, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>
<p>Nicholas Nethercote pracuje na rychlosti překladače Rustu deset let a&nbsp;jednou za čas sepíše, co se za tu dobu povedlo. <a href="https://nnethercote.github.io/2026/07/31/how-to-speed-up-the-rust-compiler-in-july-2026.html" rel="noopener" target="_blank">Poslední díl vyšel 31.&nbsp;července 2026</a> a&nbsp;pokrývá období od&nbsp;3.&nbsp;prosince 2025 do&nbsp;29.&nbsp;července 2026.</p>
<p>Souhrnné číslo zní 5,59&nbsp;% – o&nbsp;tolik se v&nbsp;průměru zkrátila doba běhu měřených úloh. Zhruba polovinu toho zisku ale nepřinesl samotný překladač, nýbrž <strong>rustdoc</strong>, nástroj na generování dokumentace: ten zrychlil v&nbsp;průměru o&nbsp;37,92&nbsp;%. Když se rustdoc z&nbsp;výpočtu vyjme, zbude 2,90&nbsp;%.</p>
<p>To je poctivé rozlišení, které se v&nbsp;podobných shrnutích často ztrácí. Kdo překládá kód a&nbsp;dokumentaci negeneruje, těch pět a&nbsp;půl procenta nepocítí.</p>
<h2>Kde se vzalo těch skoro čtyřicet procent</h2>
<p>Za největší kus stojí čtyři změny Noaha Leva, které omezily práci při zpracování bloků <code>impl</code>. Autor shrnutí u&nbsp;nich přiznává, že jim do&nbsp;podrobností nerozumí – a&nbsp;cituje Guillauma Gomeze. Ten to shrnul větou, kterou tu překládáme: „to všechno proto, že někdo narazil na podivnou chybu při používání rustdocu.“</p>
<p>Druhá změna je vděčnější na vysvětlení. Jakub Beránek přidal měřicí úlohy rustdocu do&nbsp;trénovací sady pro <strong>PGO</strong> – optimalizaci, při které se program nejdřív spustí, změří se, kudy běh doopravdy chodí, a&nbsp;teprve pak se přeloží podle toho. Rustdoc díky tomu zrychlil v&nbsp;průměru o&nbsp;2,85&nbsp;%, v&nbsp;nejlepším případě přes šest procent. Nethercote k&nbsp;tomu píše, že se PGO nastavuje obtížně, ale umí hodně změnit – a&nbsp;že na trénovací sadě záleží.</p>
<p>Třetí je jeho vlastní: <a href="https://github.com/rust-lang/rust/pull/157179" rel="noopener" target="_blank">změna způsobu, jakým rustdoc řadí bloky <code>impl</code></a>. Dřív se řadily dlouhé vygenerované řetězce HTML, teď se řadí podle kratší textové podoby jména. Sloučeno 31.&nbsp;května 2026, dvacet přidaných a&nbsp;dvacet šest odebraných řádků; v&nbsp;nejlepším případě to ubralo přes šest procent instrukcí.</p>
<h2>Většina volání nedělala nic</h2>
<p>Nejnázornější případ se týká <strong>Clippy</strong>, nástroje na kontrolu stylu a&nbsp;častých chyb. Clippy má stovky samostatných kontrol a&nbsp;každá z&nbsp;nich může obsloužit několik desítek událostí – <code>check_item</code>, <code>check_stmt</code>, <code>check_expr</code> a&nbsp;další. Při průchodu stromem se pro každý uzel zavolá příslušná metoda u&nbsp;<em>každé</em> kontroly.</p>
<p>Jenže většina kontrol si všímá jen jedné události, často jediné. Zbylá volání tedy nedělají nic – a&nbsp;přesto je každé z&nbsp;nich virtuální, tedy takové, u&nbsp;kterého se cíl skoku hledá až za&nbsp;běhu. Vývojář vystupující jako xmakro našel způsob, jak průchody spojit tak, aby se prázdné metody nevolaly vůbec.</p>
<p>Nethercote zkoumal tentýž problém současně a&nbsp;přišel s&nbsp;vlastním řešením. Nesloučilo se – bylo funkčně rovnocenné, ale zasahovalo do&nbsp;kódu víc. Změřil u&nbsp;něj ale podrobnosti, které stojí za&nbsp;citaci: doba běhu Clippy klesla ve&nbsp;většině případů <strong>o&nbsp;10 až 30&nbsp;%</strong>, chybné předpovědi skoků o&nbsp;20 až 80&nbsp;% na skutečných příkladech a&nbsp;o&nbsp;97&nbsp;% na jednom zátěžovém testu.</p>
<p>Sám k&nbsp;tomu dodává, že po&nbsp;deseti letech práce na výkonu překladače zkoušel optimalizovat Clippy poprvé, našel vážný problém, opravil ho – a&nbsp;pak zjistil, že ho někdo o&nbsp;pár dní předběhl.</p>
<h2>Osm bajtů nad mezí</h2>
<p>Druhý případ je ještě konkrétnější a&nbsp;týká se nového řešitele takzvaných <em>trait</em>ů, tedy té části překladače, která rozhoduje, jestli typ splňuje požadované vlastnosti. Vývojář lcnr upozornil na&nbsp;dva balíčky, kde nový řešitel běžel výrazně pomaleji.</p>
<p>Nethercote je proměřil a&nbsp;zjistil, že skoro polovinu času tráví překladač ve&nbsp;funkci <code>memcpy</code>, tedy prostým kopírováním paměti. Příčina: horké pole obsahovalo prvky o&nbsp;velikosti 136&nbsp;bajtů. LLVM, které rustc používá na&nbsp;generování strojového kódu, přepíná u&nbsp;hodnot nad&nbsp;128&nbsp;bajtů z&nbsp;přímých instrukcí právě na&nbsp;volání <code>memcpy</code>.</p>
<p><a href="https://github.com/rust-lang/rust/pull/160005" rel="noopener" target="_blank">Oprava</a> udělala dvě věci: vyhnula se dvěma třetinám přesunů a&nbsp;zmenšila typ na&nbsp;104&nbsp;bajtů, aby zbylé přesuny pod&nbsp;tu mez spadly. U&nbsp;dvou nejhorších balíčků to zkrátilo dobu běhu o&nbsp;40&nbsp;%. Sloučeno 28.&nbsp;července 2026, sedmdesát tři přidaných řádků.</p>
<p>Naše hodnocení: tohle je poučnější než souhrnné procento. Osm bajtů nad prahem, o&nbsp;kterém programátor v&nbsp;Rustu běžně neuvažuje, protože ho určuje až vrstva pod&nbsp;ním.</p>
<h2>Co ještě a&nbsp;kdo</h2>
<p>U&nbsp;přírůstkového překládání – kdy se po&nbsp;úpravě nepřekládá všechno znovu – přibylo šest drobnějších změn od&nbsp;vývojářů vystupujících jako Zalathar, zetanumbers a&nbsp;xmakro; nejlepší z&nbsp;nich ubraly 5 až 10&nbsp;% instrukcí.</p>
<p>Nový řešitel <em>trait</em>ů se chystá na vydání a&nbsp;na&nbsp;jedné z&nbsp;měřicích úloh klesla doba běhu za&nbsp;tři měsíce z&nbsp;27&nbsp;sekund pod&nbsp;jednu. Nethercote zároveň upozorňuje, že o&nbsp;většině té práce sám nemá přehled.</p>
<p>Za&nbsp;zmínku stojí i&nbsp;to, kdo změny psal. Kromě dlouholetých přispěvatelů se objevují dvě nová jména: už zmíněný xmakro a&nbsp;arya dradjica, autorka experimentálního překladače Rustu zaměřeného na rychlost, která na&nbsp;práci nově dostává finanční podporu a&nbsp;věnuje se rozbalování maker.</p>
<h3>Zdroje</h3>
<ul><li><a href="https://nnethercote.github.io/2026/07/31/how-to-speed-up-the-rust-compiler-in-july-2026.html" rel="noopener" target="_blank">Nicholas Nethercote: How to speed up the Rust compiler in July 2026</a>, 31. 7. 2026</li><li><a href="https://github.com/rust-lang/rust/pull/160005" rel="noopener" target="_blank">rust-lang/rust #160005 — Avoid excessive memcpys with the new solver</a>, sloučeno 28. 7. 2026</li><li><a href="https://github.com/rust-lang/rust/pull/157179" rel="noopener" target="_blank">rust-lang/rust #157179 — rustdoc: optimize impl sorting</a>, sloučeno 31. 5. 2026</li></ul>
<p>Čísla u&nbsp;obou změn v&nbsp;seznamu jsou ověřená proti rozhraní GitHubu, ne jen proti shrnutí: autor, datum sloučení i&nbsp;rozsah zásahu sedí.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-a89-stopky-6064cf19.jpg" length="69375" type="image/jpeg" />
		</item>
		<item>
			<title>Huawei se ptal Mesy na ovladač s uzavřenou částí kompilátoru, tři vývojáři byli proti</title>
			<link>https://tech-blog.chatujme.cz/clanek/huawei-mesa-uzavreny-backend</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/huawei-mesa-uzavreny-backend</guid>
			<pubDate>Thu, 30 Jul 2026 13:11:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Inženýr Huawei poslal 30. července do mailing listu Mesy dotaz, jestli by projekt přijal ovladač Vulkan pro jejich vlastní grafický čip. Jedna část kompilátoru by zůstala binárkou, protože instrukční sadu firma zveřejnit nesmí. Během dne odpověděli tři vývojáři a žádný z nich pro to nebyl.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-huawei-mesa-sidlo-5b1e0eab.jpg" alt="Výšková budova s nápisem Huawei v areálu firmy v Šen-čenu"><figcaption>Výšková budova v&nbsp;areálu Huawei Bantian v&nbsp;šenčenském obvodu Lung-kang. Foto: Liuxingy, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Ve čtvrtek 30.&nbsp;července v&nbsp;1.49 UTC dorazil do mailing listu projektu <a href="https://mesa3d.org/" rel="noopener">Mesa</a> dotaz s&nbsp;předmětem <a href="https://lists.freedesktop.org/archives/mesa-dev/2026-July/226683.html" rel="noopener">Upstreaming a Vulkan driver with a closed shader backend</a>. Napsal ho jingxu zhang a&nbsp;hned v&nbsp;první větě uvedl, pro koho pracuje: dělá v&nbsp;Huawei na ovladači Vulkan pro grafický čip, který si firma navrhuje sama. Odeslal ho ze soukromé adresy na Gmailu, ne z&nbsp;firemní.</p>

<p>Mesa je sbírka otevřených grafických ovladačů; vyvíjí se hlavně pro Linux, ale podle vlastní dokumentace běží i&nbsp;na Windows a&nbsp;dalších systémech. Patří do ní i&nbsp;RADV, ovladač Vulkan pro karty AMD, jehož <a href="/clanek/radv-vulkan-ovladac-na-windows">port na Windows</a> platí Valve.</p>

<h2>Co přesně by zůstalo zavřené</h2>

<p>Zhang popsal jedno omezení. Instrukční sadu čipu, tedy soupis příkazů, kterým procesor rozumí, Huawei zveřejnit nemůže. Z&nbsp;toho plyne dělení: samotný ovladač otevřený být může, stejně jako převody na úrovni NIR, což je společný mezijazyk, do kterého Mesa shadery překládá, než z&nbsp;nich udělá strojový kód. Zavřená by zůstala jen poslední fáze, která NIR přeloží do strojového kódu Huawei. Ta by se dodávala jako binárka, kterou si ovladač natáhne za běhu.</p>

<p>Ten rozdíl stojí za zdůraznění, protože se v&nbsp;přetisku ztratil. Phoronix o&nbsp;věci napsal, že open source nemůže být kompilátor shaderů; ve skutečnosti jde jen o&nbsp;jeho koncovou část. Zbytek řetězce, včetně optimalizací nad NIR, by byl k&nbsp;dispozici.</p>

<p>Zhang zároveň napsal, že si přečetl dva dokumenty projektu, <code>docs/license.rst</code> a&nbsp;<code>docs/submittingpatches.rst</code>, a&nbsp;ani v&nbsp;jednom takový zákaz nenašel. Dodal ale, že mlčení nepovažuje za souhlas. Také uvedl, že nenašel starší případ, kdy by se na totéž ptal jiný výrobce, ať už dopadl jakkoli.</p>

<h2>Odpověď přišla za sedm hodin</h2>

<p>V&nbsp;8.54 UTC odpověděl <a href="https://lists.freedesktop.org/archives/mesa-dev/2026-July/226684.html" rel="noopener">Dave Airlie</a>, který podle serveru Phoronix pracuje v&nbsp;Red Hatu. Začal jednou větou: „It's very unlikely we would accept this upstream, just open the ISA, your customers will be much happier in the long run.“ V&nbsp;překladu: je velmi nepravděpodobné, že by to projekt přijal, ať Huawei radši otevře instrukční sadu, zákazníci z&nbsp;toho budou mít dlouhodobě víc.</p>

<p>Pak vyjmenoval důvody. První je nerovnováha: podle něj by z&nbsp;takového uspořádání měl výrobce víc než projekt. Druhý je technický a&nbsp;míří na to, že by uprostřed stromu vzniklo umělé rozhraní mezi otevřenou a&nbsp;zavřenou částí. Airlie k&nbsp;tomu připsal, že problémů s&nbsp;rozhraním vůči LLVM má Mesa dost i&nbsp;teď, „and that's open source“ – a&nbsp;to je open source; zavřená obdoba by podle něj byla „horribly limiting“, tedy hrozně svazující.</p>

<p>Třetí důvod je o&nbsp;rovných podmínkách. Ostatní, kdo mají kód v&nbsp;Mese, si s&nbsp;tím poradili, píše Airlie, a&nbsp;ptá se, proč by komunita měla pouštět dovnitř někoho, kdo na stejnou laťku nedosáhne.</p>

<p>Nakonec přidal poznámku, která by před dvěma lety nedávala smysl: „With claude it would take someone who cared a week of tokens to figure out your ISA, I'm not sure what secret you'd be hiding.“ Tedy že s&nbsp;jazykovým modelem by odhalení instrukční sady stálo někoho zaujatého týden tokenů, a&nbsp;Airlie si není jistý, jaké tajemství by se tím vlastně chránilo.</p>

<h2>Zbylí dva se přidali</h2>

<p>Odpoledne dorazily <a href="https://lists.freedesktop.org/archives/mesa-dev/2026-July/226685.html" rel="noopener">další dvě reakce</a>. Alyssa Rosenzweig napsala dvě věty: přidává se k&nbsp;Daveovi a&nbsp;pro jakýkoli otevřený ovladač je tohle naprosto nepřijatelné. O&nbsp;šestatřicet minut později <a href="https://lists.freedesktop.org/archives/mesa-dev/2026-July/226686.html" rel="noopener">Faith Ekstrand</a> souhlasila s&nbsp;Airliem a&nbsp;dodala, že jakkoli by ráda viděla podporu čipů Huawei v&nbsp;Mese, závislost na vnějším binárním kompilátoru prostě není schůdná.</p>

<p>Formálně nešlo o&nbsp;rozhodnutí projektu. Zhang žádný kód nepodal, jen se zeptal, a&nbsp;v&nbsp;listu se nehlasovalo. Odpověděli mu ale tři lidé, kteří v&nbsp;Mese dlouhodobě pracují, a&nbsp;shodli se.</p>

<h2>Zákaz v&nbsp;pravidlech opravdu není</h2>

<p>V&nbsp;jedné věci měl Zhang pravdu. Dokumentace Mesy o&nbsp;binárních částech ovladače nemluví: <a href="https://docs.mesa3d.org/license.html" rel="noopener">stránka o&nbsp;licenci</a> jen popisuje, že jádro knihovny je pod licencí MIT, jednotlivé soubory můžou mít vlastní licenci a&nbsp;rozhodující je identifikátor SPDX přímo ve zdrojovém souboru. Žádná věta o&nbsp;tom, že ovladač nesmí za běhu natahovat binárku, tam není.</p>

<p>Odpor je tedy zavedená praxe, ne odstavec v&nbsp;pravidlech. Opírá se o&nbsp;to, co říká Airlie: ostatní si s&nbsp;tím poradili. Dokumentace Mesy vede jako otevřený ovladač Vulkan třeba <a href="https://docs.mesa3d.org/drivers/powervr.html" rel="noopener">PowerVR</a> pro čipy Imagination Technologies.</p>

<h2>Jak to nejspíš dopadne</h2>

<p>Zhang na konci dotazu napsal, že v&nbsp;otevírání kódu bude Huawei pokračovat tak jako tak. Otázka podle něj zněla jen, jestli tu práci mířit do hlavního stromu Mesy. Pokud firma instrukční sadu nezveřejní, zůstane ovladač nejspíš mimo něj, tedy jako samostatný projekt, který si musí uživatel sehnat a&nbsp;udržovat sám.</p>

<p>O&nbsp;jaký čip vlastně jde, se z&nbsp;vlákna nedozvíte. Zhang návrh nijak nepopsal a&nbsp;Phoronix k&nbsp;tomu <a href="https://www.phoronix.com/news/Huawei-Half-Open-Mesa-Vulkan" rel="noopener">dodává</a>, že Huawei dnes neprodává herní ani univerzální grafické karty; má akcelerátory Ascend a&nbsp;Atlas určené pro výpočty umělé inteligence. Jestli je ovladač Vulkan právě pro ně, ani jeden zdroj neuvádí.</p>

<p>Podle nás je na celé věci zajímavější Airlieho argument o&nbsp;tokenech než samotné odmítnutí. Utajení instrukční sady bylo dlouho drahé prolomit. Jestli platí, že dnes stačí týden strojového času, ztrácí smysl chránit ji zrovna tímhle způsobem.</p>

<h2>Zdroje</h2>

<ul>
<li>Vlákno <a href="https://lists.freedesktop.org/archives/mesa-dev/2026-July/thread.html" rel="noopener">Upstreaming a Vulkan driver with a closed shader backend</a> v&nbsp;archivu mailing listu mesa-dev, 30.&nbsp;července 2026</li>
<li>Phoronix: <a href="https://www.phoronix.com/news/Huawei-Half-Open-Mesa-Vulkan" rel="noopener">Huawei Considers Open-Sourcing A Half-Hearted Mesa Vulkan Driver</a></li>
<li>Dokumentace Mesy: <a href="https://docs.mesa3d.org/license.html" rel="noopener">License and Copyright</a></li>
</ul>
]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-huawei-mesa-sidlo-5b1e0eab.jpg" length="169517" type="image/jpeg" />
		</item>
		<item>
			<title>Turso přepsal SQLite do Rustu a nad stejným jádrem staví Postgres, zatím jen ze zdroje</title>
			<link>https://tech-blog.chatujme.cz/clanek/turso-postgres-rust</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/turso-postgres-rust</guid>
			<pubDate>Wed, 29 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Databázový projekt Turso, který vznikl jako přepis SQLite do jazyka Rust, oznámil 16. července, že nad stejným jádrem staví i Postgres. Autoři to popisují jako „LLVM databází“: jedno jádro a víc jazykových rozhraní nad ním. Hotová databáze to zatím není – balíčky ke stažení neexistují a oznámení samo mluví o základu, ne o hotovém produktu.]]></description>
			<content:encoded><![CDATA[<p>Databázový projekt Turso vznikl jako přepis SQLite do jazyka <a href="/clanek/rust-197-mangling-v0">Rust</a>. 16.&nbsp;července jeho autoři oznámili, že nad stejným jádrem chtějí postavit i&nbsp;Postgres. Podrobnosti doplnil 29.&nbsp;července server The Register, kterému se k&nbsp;záměru vyjádřil ředitel firmy Glauber Costa.</p>

<figure><img src="/uploads/foto-turso-postgres-rust-cf5d3d67.jpg" alt="Kresba Väinämöinena s mořskou obludou Iku-Turso"><figcaption>Väinämöinen drží v&nbsp;člunu mořskou obludu Iku-Turso, kresba z&nbsp;roku 1897. Podle téhle bytosti z&nbsp;Kalevaly dostal projekt jméno. Ilustrace: Hugo Simberg, Wikimedia Commons (volné dílo)</figcaption></figure>

<h2>Od forku k&nbsp;přepisu</h2>

<p>Costa a&nbsp;spoluzakladatel Pekka Enberg odešli z&nbsp;firmy ScyllaDB a&nbsp;v&nbsp;San Franciscu založili ChiselStrike. Potřebovali databázi pro cloudovou službu a&nbsp;sáhli po SQLite, který v&nbsp;roce 2000 napsal D. Richard Hipp. Naráželi ale na to, že Hipp drží záběr SQLite úmyslně malý a&nbsp;nepřijímá cizí příspěvky. Oznámení Tursa k&nbsp;tomu dodává, že uzavřená je i&nbsp;proslulá testovací sada SQLite.</p>

<p>ChiselStrike proto SQLite rozvětvil pod jménem libSQL. Drobnosti šlo doplňovat i&nbsp;tak, ale bohatší typový systém by znamenal sáhnout na samotné jádro. Firma se tedy pustila do úplného přepisu s&nbsp;krycím jménem Limbo. Mezitím se přejmenovala na Turso a&nbsp;Limbo převzalo jméno po ní; Turso je mořská obluda Iku-Turso z&nbsp;finské Kalevaly.</p>

<p>Dnešní Turso umí otevřít i&nbsp;vytvořit soubor SQLite. Oproti předloze přidává souběžné zápisy, bohatší typy a&nbsp;materializované pohledy, které se podle autorů aktualizují samy. Kód je pod licencí MIT a&nbsp;k&nbsp;30.&nbsp;červenci má repozitář na GitHubu přes 23 tisíc hvězd. Oznámení uvádí přes 260 přispěvatelů – to číslo pochází od firmy a&nbsp;nezávisle jsme ho neověřovali.</p>

<h2>SQLite je uvnitř virtuální stroj</h2>

<p>Celý nápad stojí na jedné vlastnosti SQLite, kterou zvenčí není vidět. SQLite dotaz nevykonává přímo: přeloží ho do vlastního bajtkódu zvaného VDBE a&nbsp;ten pak spouští. Není to univerzální jazyk jako bajtkód Javy, instrukce mají databázový význam typu „najdi záznam v&nbsp;B-stromu“. Pořád je to ale bajtkód a&nbsp;Turso stejný návrh převzalo.</p>

<p>Aby autoři ukázali, že jejich verze toho bajtkódu zvládne i&nbsp;něco jiného než dotazy, napsali malý překladač z&nbsp;jazyka C do VDBE a&nbsp;přeložili jím Doom. Hra běží přímo v&nbsp;databázovém stroji: každý vykreslený snímek je jeden řádek výsledku a&nbsp;paměť zastupují binární data, ze kterých se čte a&nbsp;do kterých se zapisuje. Demo je na stránce oznámení a&nbsp;spustí se v&nbsp;prohlížeči.</p>

<h2>Co znamená psát Postgres v&nbsp;Tursu</h2>

<p>Spojit SQLite s&nbsp;Postgresem zkoušel kdekdo, obvykle překladem dotazů z&nbsp;jednoho dialektu do druhého. Turso jde jinudy. Postgres se rozebere do společné stromové podoby dotazu a&nbsp;ta se přeloží do téhož bajtkódu – jazykové rozhraní se tedy stává vyměnitelnou součástkou.</p>

<p>Rozdíly mezi oběma databázemi tím nemizí. Postgres drží řádky v&nbsp;haldových souborech s&nbsp;oddělenými indexy, verzuje záznamy a&nbsp;musí po sobě uklízet průchodem zvaným vacuum; SQLite skládá všechno do jednoho B-stromu. Podle oznámení jde ale o&nbsp;rozdíly v&nbsp;uspořádání dat na disku, ne v&nbsp;tom, co databáze dělá – a&nbsp;co v&nbsp;bajtkódu chybí, se do něj doplní.</p>

<p>Prototyp jménem pgmicro už je začleněný do hlavní větve. „Turso se stává LLVM databází. Jedno moderní a&nbsp;spolehlivé jádro, nad ním víc databázových rozhraní přeložených do něj,“ stojí v&nbsp;oznámení (přeloženo). Firma zmiňuje jako další možné kandidáty MySQL a&nbsp;Redis.</p>

<p>Motivem není nespokojenost s&nbsp;Postgresem. „Nemyslím si, že by na Postgresu bylo něco zásadně špatně. Kdyby bylo, nepřepisovali bychom ho,“ řekl Costa serveru The Register (přeloženo). Argumentem je architektura: nová databáze podle oznámení nemá držet vlastní proces pro každé připojení a&nbsp;má běžet i&nbsp;v&nbsp;prohlížeči nebo jako jediný soubor.</p>

<h2>Co zatím není hotové</h2>

<p>Oznámení samo píše, že jde o&nbsp;základ, ne o&nbsp;hotový produkt. Balíčky ke stažení nejsou žádné; kdo si to chce zkusit, musí si projekt přeložit ze zdrojového kódu příkazem <code>cargo run</code> v&nbsp;adresáři <code>postgres/cli</code>.</p>

<p>Úplná shoda s&nbsp;Postgresem se navíc neplánuje. Firma píše, že cílí na „dostatečnou“ kompatibilitu v&nbsp;základní funkčnosti, ne na sto procent, protože některé věci chce dělat jinak – materializované pohledy se v&nbsp;Tursu aktualizují průběžně a&nbsp;autoři nevidí důvod doplňovat kvůli shodě i&nbsp;variantu, která to nedělá. Síťový protokol a&nbsp;serverovou část slibují, takže by se stávající aplikace i&nbsp;klient <code>psql</code> měly připojit beze změny.</p>

<p>Dvě věci zůstávají otevřené. Procedurální jazyk PL/pgSQL firma nejspíš nenapíše přímo, ale postaví něco vlastního a&nbsp;k&nbsp;tomu vrstvu, která PL/pgSQL zpřístupní. U&nbsp;rozšíření Postgresu má zatím jen důkaz proveditelnosti: nahrávají se v&nbsp;kontejneru WebAssembly, což stojí výkon, a&nbsp;firma výslovně píše, že se touhle cestou vydat nemusí a&nbsp;některá rozšíření nepůjdou nikdy.</p>

<p>Termín zazněl jediný a&nbsp;je to slib, ne plán s&nbsp;daty: dost velkou část Postgresu na to, aby byl v&nbsp;praxi užitečný, chtějí autoři mít během pár měsíců.</p>

<h2>Kde to stojí mezi ostatními</h2>

<p>Databáze, která umí mluvit víc jazyky, není nová myšlenka. Nabízí se Spanner od Googlu a&nbsp;Cosmos od Microsoftu, oba ale podle Costy pracují ve vrstvení výš. Blíž má Turso podle The Register k&nbsp;projektu Apache DataFusion, rovněž psanému v&nbsp;Rustu. Rozdíl shrnul Costa tak, že Turso sedí na nejnižší možné úrovni, přesně jednu vrstvu nad úložným strojem.</p>

<p>Náš názor: na hodnocení je brzy. Zajímavé na oznámení není to, že někdo přepisuje Postgres – takových pokusů byla řada –, ale že se to tentokrát dělá nad jádrem, které už jednu velkou databázi obsluhuje a&nbsp;je veřejně k&nbsp;vyzkoušení. Jestli to vyjde, ukáže až chvíle, kdy půjde ta „dostatečná“ kompatibilita změřit na skutečné aplikaci.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://turso.tech/blog/a-new-modern-version-of-postgres-in-rust" target="_blank" rel="noopener">Turso: We're building Postgres in Rust. Using the LLVM of databases</a> (16.&nbsp;července 2026)</li>
<li><a href="https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite-in-rust-turso-turns-its-sights-on-postgres/5279835" target="_blank" rel="noopener">The Register: After rewriting SQLite in Rust, Turso turns its sights on Postgres</a> (29.&nbsp;července 2026)</li>
<li><a href="https://github.com/tursodatabase/turso" target="_blank" rel="noopener">Repozitář projektu na GitHubu</a> – licence a&nbsp;popis projektu</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-turso-postgres-rust-cf5d3d67.jpg" length="242382" type="image/jpeg" />
		</item>
		<item>
			<title>SQLite vydal čtvrtou opravu větve 3.53. Chyb hlášených s pomocí AI podle něj ubývá</title>
			<link>https://tech-blog.chatujme.cz/clanek/sqlite-3-53-4-chyby-hlasene-s-pomoci-ai</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/sqlite-3-53-4-chyby-hlasene-s-pomoci-ai</guid>
			<pubDate>Wed, 29 Jul 2026 01:20:41 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[SQLite vydal 24. července verzi 3.53.4 a v novinkách k ní stojí, že tempo hlášení chyb pořízených s pomocí AI znatelně kleslo. Veřejná časová osa změn tomu odpovídá: mezi 3.53.2 a 3.53.3 přibylo 44 oprav s odkazem na hlášení, v následujícím okně už jen 20. U curlu je pohled opačný, letos mu vyšlo 36 zveřejněných zranitelností proti devíti za celý loňský rok.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/m2-2026-08-01-sqlite-help-ab28f6eb.png" alt="Přehled tečkových příkazů příkazové řádky SQLite"><figcaption>Tečkové příkazy příkazové řádky SQLite. Ta dostala ve verzi 3.53.0 nové formátování výsledků i&nbsp;přepracovaný příkaz .mode. Foto: Klaas `Z4us` van B. V, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>
<p>SQLite vydal 24.&nbsp;července <a href="https://sqlite.org/releaselog/3_53_4.html" rel="noopener">verzi 3.53.4</a>. Je to čtvrtá opravná verze větve 3.53 za necelé čtyři měsíce a&nbsp;SQLite ji popisuje větou, jakou u&nbsp;opravného vydání jinde nenajdete: opravuje chyby, které většinou objevily AI.</p>
<p>Rozepsanější je <a href="https://sqlite.org/news.html" rel="noopener">novinkový zápis</a> k&nbsp;témuž datu. „Krátce po vydání 3.53.0 (2026-04-09) přišel obrovský nápor hlášení chyb pořízených s&nbsp;pomocí AI, ale v&nbsp;poslední době tempo hlášení znatelně kleslo a&nbsp;chyby, které se hlásí, jsou čím dál bezvýznamnější,“ píše se v&nbsp;něm (přeloženo). Následuje otázka, ne tvrzení: jestli lavina nekončí a&nbsp;jestli AI nenašly skoro všechno, co najít umějí. Zápis dodává, že příští vydání už možná bude 3.54.0 s&nbsp;novými funkcemi.</p>
<h2>Co k&nbsp;tomu říká záznam změn</h2>
<p>SQLite vyvíjí ve Fossilu a&nbsp;celá časová osa je veřejná, takže se ta věta dá zkusit ověřit. Vzali jsme <a href="https://sqlite.org/src/timeline?r=branch-3.53" rel="noopener">check-iny větve branch-3.53</a> od vydání 3.53.0 a&nbsp;rozdělili je do oken mezi jednotlivými opravnými verzemi. Tatáž oprava se do stromu obvykle dostane dvakrát, do hlavní větve i&nbsp;do 3.53, takže se dvojice slučovaly na jednu položku.</p>
<ul>
<li>3.53.1, okno 26&nbsp;dní: 36 check-inů, z&nbsp;toho 13 s&nbsp;odkazem na hlášení</li>
<li>3.53.2, okno 29&nbsp;dní: 73 check-inů, z&nbsp;toho 35 s&nbsp;odkazem na hlášení</li>
<li>3.53.3, okno 23&nbsp;dní: 78 check-inů, z&nbsp;toho 44 s&nbsp;odkazem na hlášení</li>
<li>3.53.4, okno 28&nbsp;dní: 36 check-inů, z&nbsp;toho 20 s&nbsp;odkazem na hlášení</li>
</ul>
<p>„Odkazem na hlášení“ myslíme zprávu check-inu, která jmenuje příspěvek na fóru, číslo hlášení nebo toho, kdo problém nahlásil. Přepočteno na den je to 0,5, 1,2, 1,9 a&nbsp;0,7 takové opravy. Pokles proti červnovému vrcholu je tedy zhruba na dvě pětiny a&nbsp;tvar odpovídá tomu, co SQLite píše. Je to ovšem počet oprav, ne počet hlášení, a&nbsp;datum opravy nemusí být datem, kdy chyba přišla.</p>
<p>Jedna věc se s&nbsp;popisem míjí. Nápor podle novinek přišel „krátce po vydání 3.53.0“, v&nbsp;záznamu je ale první okno nejchudší ze všech a&nbsp;vrchol spadá až na květen a&nbsp;červen. Kdo by chtěl vlnu vidět v&nbsp;dubnu, v&nbsp;časové ose ji nenajde.</p>
<h2>Kde se AI v&nbsp;záznamu jmenuje</h2>
<p>V&nbsp;celé větvi se AI jmenuje přímo dvakrát. <a href="https://sqlite.org/src/info/c980094956a34842" rel="noopener">Check-in z&nbsp;23.&nbsp;června</a> nese zprávu „opravy tří samostatných chyb objevených AI v&nbsp;nedodávaných rozšířeních“ (přeloženo). Jde o&nbsp;zaokrouhlování samých devítek v&nbsp;rozšíření decimal, o&nbsp;odstranění uvozovek v&nbsp;parametrech virtuální tabulky fuzzer a&nbsp;o&nbsp;čtení za koncem vyrovnávací paměti ve funkci next_char() rozšíření spellfix. Žádné z&nbsp;těch tří rozšíření se s&nbsp;knihovnou nedodává, používají se při testování.</p>
<p>Druhá zmínka váží víc. <a href="https://sqlite.org/src/info/b6ab126399a5df66" rel="noopener">Check-in z&nbsp;9.&nbsp;července</a> říká, že v&nbsp;programu <a href="https://sqlite.org/rsync.html" rel="noopener">sqlite3_rsync</a> opravuje „tři vady, které identifikoval Anthropic“ (přeloženo). Tenhle nástroj se dodává a&nbsp;slouží k&nbsp;tomu, aby se kopie databáze na druhém stroji srovnala s&nbsp;originálem, případně přes SSH. Změna sahá na jediný soubor, <code>tool/sqlite3_rsync.c</code>.</p>
<p>U&nbsp;ostatních oprav se ve zprávě check-inu o&nbsp;původci nedočtete. Zpráva odkáže na příspěvek na fóru nebo na časové razítko hlášení a&nbsp;tím to končí, takže poměr „kolik z&nbsp;toho našly AI“ jde z&nbsp;veřejného záznamu odhadnout jen podle toho, co SQLite napsal v&nbsp;novinkách.</p>
<h2>Testovacího kódu má SQLite 590krát víc než vlastního</h2>
<p>SQLite se dlouhodobě chlubí testováním a&nbsp;čísla k&nbsp;tomu má. Podle vlastní stránky <a href="https://sqlite.org/testing.html" rel="noopener">How SQLite Is Tested</a> má projekt 590krát víc testovacího kódu než kódu knihovny, čtyři nezávisle vyvíjené sady testů a&nbsp;stoprocentní větvové pokrytí v&nbsp;takové konfiguraci, v&nbsp;jaké se knihovna dodává. Ty údaje jsou ovšem počítané k&nbsp;verzi 3.42.0 z&nbsp;května 2023, novější stránka neuvádí.</p>
<p>Že to nestačí, ukázala sama větev 3.53. Vznikla jako znovuvydání staženého 3.52.0 a&nbsp;nese opravu chyby, která poškozovala databáze; v&nbsp;seznamu změn vystupuje jako chyba při resetu žurnálu WAL. K&nbsp;verzi 3.52.0, kde se oprava objevila poprvé, SQLite 6.&nbsp;března napsal, že jde o&nbsp;patnáct let starou chybu nalezenou pár dní předtím. Kdo ji objevil, v&nbsp;novinkách nestojí.</p>
<h2>U&nbsp;curlu má vlna jiný průběh</h2>
<p>U&nbsp;curlu vypadá totéž období opačně. Ten podle vlastního odhadu projektu běží asi ve třiceti miliardách instalací, od telefonů po tiskárny. Jeho zakladatel Daniel Stenberg napsal 26.&nbsp;května příspěvek <a href="https://daniel.haxx.se/blog/2026/05/26/the-pressure/" rel="noopener">The pressure</a>, ve kterém popisuje tempo příchozích bezpečnostních hlášení jako čtyř až pětinásobek roku 2024 a&nbsp;dvojnásobek roku 2025, tedy v&nbsp;průměru přes jedno hlášení denně. Nejde podle něj o&nbsp;nesmysly: kvalita hlášení je vyšší než kdy dřív a&nbsp;jsou dlouhá a&nbsp;podrobná. Uvádí i&nbsp;osobní cenu, kterou to má: podle vlastních slov poprvé v&nbsp;životě vyjádřila jeho žena obavy z&nbsp;jeho pracovní doby.</p>
<p>Čísla si lze ověřit v&nbsp;<a href="https://curl.se/docs/vulnerabilities.html" rel="noopener">seznamu zranitelností curlu</a>, který projekt vydává i&nbsp;jako strojově čitelný soubor. Za rok 2026 je v&nbsp;něm k&nbsp;1.&nbsp;srpnu 36 zveřejněných zranitelností proti devíti za celý rok 2025 a&nbsp;jedenácti za rok 2024. Vycházejí v&nbsp;dávkách spolu s&nbsp;vydáním knihovny: šest v&nbsp;lednu, čtyři v&nbsp;březnu, osm v&nbsp;dubnu a&nbsp;osmnáct 24.&nbsp;června. Novější dávka zatím není, protože curl od té doby nevydával, takže o&nbsp;červenci ten seznam neříká nic.</p>
<p>Závažnost je přitom nízká. Ze všech letošních je 22 hodnoceno jako Low a&nbsp;14 jako Medium, žádná výš. Stenberg to sám zmiňuje: poslední curlí zranitelnost se stupněm High vyšla podle něj v&nbsp;říjnu 2023.</p>
<p>Co ta čísla nedokládají, je příčina. Seznam zranitelností u&nbsp;jednotlivých záznamů neuvádí, jestli za nálezem stál člověk, nástroj, nebo obojí; spojení s&nbsp;AI je Stenbergovo, ne údaj z&nbsp;evidence.</p>
<h2>Dvě fáze, ne dva názory</h2>
<p>Rozdíl mezi oběma projekty nemusí být rozdíl v&nbsp;postoji. SQLite popisuje vlnu, která u&nbsp;něj začala v&nbsp;dubnu a&nbsp;v&nbsp;červenci opadá; curl popisoval na konci května stav, kdy vlna teprve narůstala, a&nbsp;jeho poslední dávka hlášení je z&nbsp;24.&nbsp;června. Jestli i&nbsp;curlu tempo klesá, se pozná až s&nbsp;příštím vydáním. Zatím platí jen to, že jeden z&nbsp;nich má vlnu podle vlastních slov za sebou a&nbsp;druhý o&nbsp;jejím konci nic nehlásí.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="https://sqlite.org/releaselog/3_53_4.html" rel="noopener">SQLite Release 3.53.4 On 2026-07-24</a>, poznámky k&nbsp;vydání</li>
<li><a href="https://sqlite.org/news.html" rel="noopener">Recent SQLite News</a>, zápis z&nbsp;24.&nbsp;července 2026</li>
<li><a href="https://sqlite.org/src/timeline?r=branch-3.53" rel="noopener">SQLite: časová osa větve branch-3.53</a>, repozitář Fossil</li>
<li><a href="https://sqlite.org/src/info/c980094956a34842" rel="noopener">Check-in c980094956</a>, 23.&nbsp;června 2026, a&nbsp;<a href="https://sqlite.org/src/info/b6ab126399a5df66" rel="noopener">check-in b6ab126399</a>, 9.&nbsp;července 2026</li>
<li><a href="https://sqlite.org/testing.html" rel="noopener">How SQLite Is Tested</a>, údaje k&nbsp;verzi 3.42.0</li>
<li><a href="https://daniel.haxx.se/blog/2026/05/26/the-pressure/" rel="noopener">Daniel Stenberg: The pressure</a>, 26.&nbsp;května 2026</li>
<li><a href="https://curl.se/docs/vulnerabilities.html" rel="noopener">curl: seznam zranitelností</a>, počty a&nbsp;závažnosti dopočítány ze strojově čitelné podoby seznamu</li>
</ul>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/m2-2026-08-01-sqlite-help-ab28f6eb.png" length="199821" type="image/png" />
		</item>
		<item>
			<title>Protokol MCP zrušil sezení, požadavek teď může obsloužit kterýkoli server</title>
			<link>https://tech-blog.chatujme.cz/clanek/mcp-bezstavovy-protokol</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/mcp-bezstavovy-protokol</guid>
			<pubDate>Tue, 28 Jul 2026 12:47:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Model Context Protocol, podle kterého si jazykové modely povídají s cizími nástroji, dostal 28. července 2026 první revizi od loňského listopadu. Zmizelo navazování spojení i identifikátor sezení – každý požadavek si nově nese vlastní verzi protokolu a schopnosti klienta. Kdo si server napsal sám, čeká ho podle vedoucího správce specifikace velký kus práce.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-10-mcp-datacentrum-e1b7ad4d.jpg" alt="Řady serverových stojanů v datovém centru CERN"><figcaption>Datové centrum CERN. Novou verzi MCP psali autoři tak, aby požadavek mohl obsloužit kterýkoli stroj v&nbsp;řadě. Foto: Hugovanmeijeren, Wikimedia Commons (CC BY-SA 3.0)</figcaption></figure>

<p>Jazykový model sám o&nbsp;sobě neumí nic než psát text. Aby sáhl do databáze, přečetl soubor nebo založil lístek v&nbsp;evidenci chyb, potřebuje domluvu, podle které se mu nástroj ohlásí a&nbsp;on ho pak zavolá. Tou domluvou je Model Context Protocol, zkráceně MCP. Vlastní dokumentace ho přirovnává k&nbsp;portu USB-C: „Stejně jako USB-C poskytuje standardizovaný způsob, jak propojit elektronická zařízení, MCP poskytuje standardizovaný způsob, jak propojit aplikace s&nbsp;umělou inteligencí s&nbsp;vnějšími systémy“ (přeloženo). Podporují ho mimo jiné Claude, ChatGPT, Visual Studio Code i&nbsp;Cursor.</p>

<p>28.&nbsp;července 2026 vyšla revize <strong>2026-07-28</strong>, první od loňské <strong>2025-11-25</strong>. Verze protokolu se značí datem schválně: podle vlastního popisu se to datum mění jen tehdy, když přibude změna rušící zpětnou slučitelnost. Tahle taková je.</p>

<h2>Konec sezení</h2>

<p>Dosud fungovalo MCP jako spojení, které se musí navázat. Klient poslal <code>initialize</code>, server odpověděl, klient potvrdil <code>initialized</code>, a&nbsp;teprve pak šlo posílat práci. Server si přitom pamatoval, s&nbsp;kým mluví, a&nbsp;účastníky rozlišoval hlavičkou <code>Mcp-Session-Id</code>.</p>

<p>Obojí je pryč. „Oficiálně jsme zrušili výměnu <code>initialize</code>/<code>initialized</code> spolu s&nbsp;hlavičkou <code>Mcp-Session-Id</code>,“ píše oznámení projektu (přeloženo). Verzi protokolu i&nbsp;schopnosti klienta nese nově každý požadavek zvlášť, v&nbsp;poli <code>_meta</code>. Kdo potřebuje, aby si server něco pamatoval mezi voláními, dostane od něj obyčejný identifikátor a&nbsp;posílá ho zpátky jako běžný parametr nástroje.</p>

<p>Dopad je prostý: požadavek může obsloužit kterýkoli běžící server. Do té doby musel provoz hlídat, aby všechny požadavky téhož klienta dopadly na týž stroj – anebo si stroje musely sezení sdílet přes společné úložiště.</p>

<p>Přibyl proto nový povinný dotaz <code>server/discover</code>. Server jím na jedno zavolání ohlásí, které verze protokolu umí, co nabízí a&nbsp;kým je. Klient ho použít nemusí; může rovnou poslat práci a&nbsp;počkat, jestli se nevrátí chyba o&nbsp;nepodporované verzi.</p>

<h2>Vedlejší produkt vlastního původu</h2>

<p>Craig McLuckie, šéf firmy Stacklok, řekl serveru The Register, že stavovost MCP „byla vlastně vedlejší produkt toho, že vzniklo jako způsob podpory vývojářů používajících nástroje na psaní kódu“ (přeloženo). Protokol tedy vznikl pro jeden editor běžící na jednom počítači a&nbsp;teprve pak se z&nbsp;něj stalo něco, co jede ve velkém.</p>

<p>Rozsah zásahu přiznává i&nbsp;projekt sám. David Soria Parra, jeden ze dvou vedoucích správců specifikace, ho pro The Register označil za „nejpodstatnější změny, jaké jsme ve specifikaci udělali, patrně od doby, kdy jsme přidali autorizaci“ (přeloženo).</p>

<h2>Co se ruší a&nbsp;co se jen odkládá</h2>

<p>Tři starší schopnosti dostaly nálepku zastaralých: Roots (klient serveru sděloval, které adresáře ho zajímají), Sampling (server si mohl vyžádat odpověď od modelu) a&nbsp;Logging (protokolové zprávy). „Pořád fungují a&nbsp;fungovat budou nejméně dvanáct měsíců,“ stojí v&nbsp;oznámení (přeloženo). Doporučená náhrada je pokaždé jiná: adresáře předávat jako parametr nástroje, na model se obracet přímo přes rozhraní jeho poskytovatele a&nbsp;zapisovat na <code>stderr</code> nebo přes OpenTelemetry.</p>

<p>Stejnou nálepku dostal starý přenos HTTP+SSE a&nbsp;dosavadní způsob registrace klienta u&nbsp;autorizačního serveru. Naopak bez odkladu zmizely <code>ping</code>, <code>logging/setLevel</code> a&nbsp;obnovování přerušeného datového proudu – když spojení spadne uprostřed požadavku, klient ho musí poslat znovu jako nový.</p>

<p>Snadno se přehlédne jedna drobnost: chyba „zdroj nenalezen“ má nově kód <code>-32602</code> místo <code>-32002</code>, aby odpovídala JSON-RPC.</p>

<h2>Kdo si server psal sám, má práci</h2>

<p>Parra to řekl bez obalu: „Kdo si postavil vlastní implementaci, čeká ho velký kus práce“ (přeloženo). Kdo staví na oficiálních knihovnách, je na tom líp – ty pro TypeScript, Python, Go a&nbsp;C# už novou verzi podporují, ta pro Rust je v&nbsp;betě.</p>

<p>Zpětná slučitelnost je slabým místem celého kroku. Server podle nové revize se se starým klientem nedomluví a&nbsp;naopak; specifikace na to má samostatnou kapitolu, bezbolestné to ale není. Někdo se připravil dopředu: GitHub oznámil 23.&nbsp;července, že jeho server MCP novou specifikaci podporuje ještě před jejím vydáním.</p>

<p>Že nejde o&nbsp;okrajovou záležitost, ukazují čísla, která projekt uvádí sám o&nbsp;sobě: „Napříč našimi knihovnami první úrovně vidíme skoro půl miliardy stažení měsíčně, přičemž knihovny pro TypeScript i&nbsp;Python překročily hranici miliardy stažení celkem“ (přeloženo). Nezávisle ověřená ta čísla nejsou.</p>

<h2>Poprvé s&nbsp;pravidly pro rušení</h2>

<p>Vedle technických změn přibyla věc procesní, která bude nejspíš důležitější než kterákoli jednotlivá úprava: formální pravidla životního cyklu. Každá schopnost je nově buď aktivní, zastaralá, nebo odstraněná, a&nbsp;mezi zastaráním a&nbsp;odstraněním musí uplynout aspoň dvanáct měsíců. Zkrácená lhůta devadesáti dnů existuje, ale jen jako výjimka.</p>

<p>Pro provozovatele je to větší jistota než dosud. Kdo pouští nástroje, ke kterým se dostane cizí model, ví, že každá změna protokolu je zároveň změna bezpečnostní – <a href="/clanek/openai-modely-utekly-z-testu-hugging-face">červencový průnik do infrastruktury Hugging Face</a> ukázal, co dokáže sestava agentů puštěná na cizí stroje. Roční lhůta na přechod aspoň znamená, že se nebude muset opravovat za pochodu.</p>

<p>Zdroje: <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener">oznámení projektu MCP</a>, <a href="https://modelcontextprotocol.io/specification/2026-07-28/changelog" rel="noopener">seznam změn ve specifikaci</a>, <a href="https://www.theregister.com/devops/2026/07/23/model-context-protocol-prepares-to-break-with-its-stateful-past/5276722" rel="noopener">The Register</a> a&nbsp;<a href="https://github.blog/changelog/month/07-2026/" rel="noopener">changelog GitHubu</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-10-mcp-datacentrum-e1b7ad4d.jpg" length="151294" type="image/jpeg" />
		</item>
		<item>
			<title>Z bezstavového MCP zmizel úvodní handshake i hlavička se session</title>
			<link>https://tech-blog.chatujme.cz/clanek/mcp-2026-07-28-bezstavovy-protokol</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/mcp-2026-07-28-bezstavovy-protokol</guid>
			<pubDate>Tue, 28 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Protokol MCP, kterým jazykové modely sahají na cizí nástroje a data, vyšel 28. července v nové verzi. Podstatná změna je jediná, zato hluboká: zmizel úvodní handshake a hlavička s identifikátorem relace, takže každý požadavek nese všechno potřebné sám. Server si tedy nemusí nic pamatovat mezi voláními a provozovatel ho může postavit za obyčejný load balancer. Starší verze podle autorů fungují dál nejméně rok.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-mcp-bezstavovy-bf75a85a.jpg" alt="Řada serverových skříní v datovém centru"><figcaption>Bezstavový protokol znamená, že požadavek může obsloužit kterákoli instance serveru – a&nbsp;je jedno, ve které skříni stojí. Foto: PiDatacenters, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Když si dnes chatovací aplikace potřebuje sáhnout do kalendáře, do databáze nebo do repozitáře, může k&nbsp;tomu použít <strong>MCP</strong>, Model Context Protocol. Podporují ho Claude i&nbsp;ChatGPT a&nbsp;z&nbsp;vývojářských nástrojů třeba Visual Studio Code nebo Cursor. Jeho nová specifikace, označená <strong>2026-07-28</strong>, vyšla <strong>28.&nbsp;července</strong> a&nbsp;mění na něm to nejzákladnější.</p>

<h2>Co se změnilo</h2>

<p>Autoři to shrnují jednou větou: „MCP se mění z&nbsp;obousměrného stavového protokolu na bezstavový protokol typu požadavek–odpověď“ (přeloženo). Prakticky to znamená, že „jsme oficiálně vyřadili výměnu <code>initialize</code>/<code>initialized</code> spolu s&nbsp;hlavičkou <code>Mcp-Session-Id</code>“ (přeloženo).</p>

<p>Co přesně si obě strany v&nbsp;úvodním pozdravu vyměňovaly, oznámení nerozvádí. Píše ale, co se děje místo toho: „Každý požadavek teď putuje sám za sebe a&nbsp;nese svou verzi protokolu, identitu klienta a&nbsp;jeho schopnosti v&nbsp;poli <code>_meta</code>“ (přeloženo). Kdo potřebuje zjistit schopnosti serveru předem, má na to nové volání <code>server/discover</code>.</p>

<h2>Proč to někoho zajímá</h2>

<p>Rozdíl je vidět až ve chvíli, kdy takový server někdo provozuje pro víc než jednoho člověka. Se stavovým protokolem musely všechny požadavky jednoho klienta dojít na tutéž instanci serveru – jinde by jeho relace nebyla. Tomu se říká <em>sticky sessions</em> a&nbsp;znamená to buď chytřejší load balancer, nebo sdílené úložiště relací pro všechny instance.</p>

<p>Bez relace tenhle požadavek mizí. Autoři to shrnují tak, že „kterýkoli požadavek může dopadnout na kteroukoli instanci za obyčejným round-robin load balancerem“ (přeloženo) – tedy za rozdělovačem, který posílá požadavky do kola bez ohledu na to, kdo je poslal.</p>

<h2>Co se dá poznat z&nbsp;hlavičky</h2>

<p>Z&nbsp;bezstavovosti plyne druhá praktická věc. Požadavek nese v&nbsp;hlavičkách <code>Mcp-Method</code> a&nbsp;<code>Mcp-Name</code>, o&nbsp;jakou metodu a&nbsp;o&nbsp;jaký nástroj jde. Brána, omezovač provozu nebo aplikační firewall tak podle autorů může směrovat a&nbsp;měřit podle nich, místo aby rozebírala tělo v&nbsp;JSONu.</p>

<p>Podobně cílí i&nbsp;další novinka: odpovědi na výpisy nástrojů, promptů a&nbsp;zdrojů teď nesou položky <code>ttlMs</code> a&nbsp;<code>cacheScope</code>, aby si klient mohl určit, jak dlouho a&nbsp;v&nbsp;jakém rozsahu si je smí schovat, a&nbsp;nestahoval je pokaždé znovu.</p>

<h2>Co to rozbije</h2>

<p>Toto je ta část, kterou oznámení o&nbsp;vydáních obvykle nepíšou nahlas. Podle rozboru na Stacktree čeká server postavený na staré specifikaci trojí práce: opustit sdílené úložiště relací, číst verzi protokolu a&nbsp;schopnosti z&nbsp;pole <code>_meta</code> u&nbsp;každého požadavku a&nbsp;doplnit metodu <code>server/discover</code>. Kdo používá dlouhoběžící úlohy, musí přejít na rozšíření Tasks a&nbsp;výsledek si vyzvedávat dotazem, místo aby čekal na odpověď.</p>

<p>Vydání nové verze ale není vypnutí té staré. Servery a&nbsp;klienti na specifikaci z&nbsp;listopadu 2025 podle autorů fungují dál. Vlastnosti označené za zastaralé – Roots, Sampling, Logging a&nbsp;starý přenos přes HTTP a&nbsp;SSE – mají zůstat ve specifikaci <strong>nejméně dvanáct měsíců</strong>.</p>

<h2>Rozšíření místo verzí</h2>

<p>Druhá změna je organizační. Novinky, které nepatří do jádra, se dělají jako <strong>rozšíření</strong> s&nbsp;identifikátorem v&nbsp;obráceném tvaru doménového jména a&nbsp;vlastním číslováním verzí, nezávislým na specifikaci samotné.</p>

<p>Dvě z&nbsp;nich jsou vidět nejvíc. <strong>MCP Apps</strong> dovolují serveru poslat interaktivní HTML rozhraní, které hostitelská aplikace vykreslí v&nbsp;odděleném rámu. <strong>Tasks</strong> řeší úlohy, které trvají déle než jedno volání: server na požadavek odpoví úchytem úlohy a&nbsp;klient si pak chodí pro výsledek.</p>

<h2>Kdo za tím stojí</h2>

<p>Specifikaci vedou dva správci, David Soria Parra a&nbsp;Den Delimarsky. Kdo protokol původně vytvořil, ani jeden z&nbsp;použitých zdrojů neuvádí; dokumentace ho popisuje jako otevřený standard a&nbsp;mezi podporovanými klienty jmenuje Claude, ChatGPT, Visual Studio Code i&nbsp;Cursor. Spolu se specifikací vyšly aktualizované sady SDK první úrovně.</p>

<p>Náš názor: přepsat protokol do bezstavové podoby takhle brzy vypadá spíš na to, že původní návrh mířil na spojení jednoho klienta s&nbsp;jedním serverem, kdežto provoz si vyžádal něco, co unese běžná webová infrastruktura.</p>

<p>Zdroje: <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener">oznámení na blogu MCP</a> (28.&nbsp;července 2026) a&nbsp;<a href="https://stacktr.ee/blog/mcp-2026-spec-changes" rel="noopener">rozbor změn na Stacktree</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-mcp-bezstavovy-bf75a85a.jpg" length="238969" type="image/jpeg" />
		</item>
		<item>
			<title>LiberSystem staví operační systém v Rustu od nuly, v emulátoru už má síť i shell</title>
			<link>https://tech-blog.chatujme.cz/clanek/libersystem-prehled</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/libersystem-prehled</guid>
			<pubDate>Mon, 27 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Počítače</category>
			<category>Programování</category>
			<description><![CDATA[Projekt LiberSystem staví operační systém od nuly v Rustu: malé mikrojádro, kapabilitní oprávnění místo roota a svazky místo přípojných bodů. Repozitář vznikl 17. června 2026 a od té doby do něj přibývá kolem sta commitů týdně. V emulátoru už systém nabootuje, rozpozná zařízení a umí síť, ale žádné vydání ke stažení zatím není.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-08-libersystem-d1589142.png" alt="Úvodní stránka webu projektu LiberSystem"><figcaption>Web projektu je dvojjazyčný, česky i&nbsp;anglicky. Foto: LiberSystem, snímek obrazovky (libersystem.com)</figcaption></figure>

<p>Nový operační systém se dnes ohlašuje skoro každý měsíc a&nbsp;většina z&nbsp;nich skončí u&nbsp;README souboru. LiberSystem je jiný aspoň v&nbsp;jednom ohledu: kódu je tam hodně a&nbsp;přibývá rychle. Na druhou stranu je repozitář starý šest týdnů, hvězdiček má čtrnáct a&nbsp;stáhnout si hotový obraz nejde. Podívali jsme se, co za tím je.</p>

<h2>Jádro jako malý rozhodčí</h2>

<p>LiberSystem není distribuce Linuxu ani unixový klon. Je to samostatný systém psaný od nuly v&nbsp;jazyce Rust a&nbsp;postavený na mikrojádru. To znamená, že v&nbsp;privilegovaném režimu běží jen nezbytné minimum: správa paměti, plánování, meziprocesová komunikace a&nbsp;hlídání přístupu k&nbsp;hardwaru. Ovladače, souborové systémy i&nbsp;síť jsou obyčejné služby v&nbsp;uživatelském prostoru. Když ovladač spadne, správce zařízení mu odebere oprávnění a&nbsp;restartuje ho, místo aby padl celý stroj. Linux to má obráceně, většina ovladačů žije uvnitř monolitického jádra.</p>

<p>Druhý pilíř je kapabilitní model. Kapabilita je nepadělatelný odkaz na objekt jádra spolu se seznamem práv, jako je čtení, zápis nebo mapování paměti. Proces nemá žádná okolní oprávnění, dostane jen to, co mu někdo výslovně předá. Účet root, který smí všechno, v&nbsp;tomhle návrhu neexistuje vůbec. Dokumentace to shrnuje tak, že komponenta smí pojmenovat věc, na kterou nedosáhne, protože pravomoc žije jen v&nbsp;kapabilitě, ne ve jméně.</p>

<p>Třetí odlišnost se týká disků. Místo jednoho globálního stromu s&nbsp;přípojnými body pracuje LiberSystem s&nbsp;explicitními svazky. Cesta patří vždy právě jednomu svazku, který se identifikuje podle UUID, a&nbsp;je to typovaný objekt, ne řetězec znaků. Jednotlivé části cesty jsou položky seznamu, takže klasický útok přes dvě tečky a&nbsp;lomítko nemá kde vzniknout. Když svazek není dostupný, operace selže. Nikdy potichu nezapíše na jiný disk.</p>

<h2>Aplikace: nativní rozhraní a&nbsp;nad ním WebAssembly</h2>

<p>Základní smlouva pro aplikace je nativní typované rozhraní přes kapability, stejné, jaké používá jádro a&nbsp;systémové služby. Nad ním má běžet hostitel pro WebAssembly, konkrétně Component Model a&nbsp;rozhraní WASI. Kalkul je jednoduchý: jeden balíček aplikace poběží na architektuře x86-64, ARM64 i&nbsp;RISC-V&nbsp;a&nbsp;je izolovaný už z&nbsp;principu.</p>

<p>Autoři si přitom nechali zadní vrátka. V&nbsp;návrhovém dokumentu stojí, že WASI je jen jeden z&nbsp;hostitelů nad stabilním nativním kontraktem, ne definice systému. Pokud se ta poměrně mladá specifikace změní, přepíše se jedna vrstva a&nbsp;ne celé jádro. Kompatibilita s&nbsp;POSIX, tedy schopnost spouštět běžný unixový software, je v&nbsp;plánu jako volitelná překladová vrstva v&nbsp;uživatelském prostoru. Zatím není.</p>

<h2>Co už opravdu běží</h2>

<p>Snímky obrazovky na webu projektu ukazují víc než obvyklý „ahoj světe“ z&nbsp;jádra. Systém nabootuje pod emulátorem QEMU, rozjede všechna procesorová jádra (na snímku 52 z&nbsp;52), spustí ovladače virtio pro disk, síť, konzoli, vstup, grafiku a&nbsp;zvuk, k&nbsp;tomu ovladač USB řadiče xHCI, přihlásí jedenáct zařízení a&nbsp;nastaví síť přes DHCP. Pak naskočí textový shell s&nbsp;výzvou ve tvaru <em>vol://</em>.</p>

<p>Na dalším snímku je vidět výpis přerušení, překlad doménového jména a&nbsp;příkaz ping, který umí vypsat výsledek jako JSON. To je praktická ukázka principu, na kterém systém stojí: existuje jedno typované rozhraní a&nbsp;binární podoba, JSON, CBOR i&nbsp;čitelný text jsou jen jeho reprezentace. Banner v&nbsp;konzoli hlásí verzi 0.0.1.</p>

<p>Sestavit se to dá zatím jen na Linuxu s&nbsp;noční verzí Rustu. Skript stáhne toolchain, příkaz <em>just build</em> přeloží jádro i&nbsp;uživatelskou část a&nbsp;<em>just run</em> ji spustí v&nbsp;emulátoru. Bootovatelný obraz pro reálný počítač s&nbsp;UEFI vyrobit jde, starý BIOS projekt nepodporuje. Jestli někdo LiberSystem skutečně nabootoval na fyzickém železe, se mi ověřit nepodařilo. Všechny doložené snímky pocházejí z&nbsp;emulátoru a&nbsp;i&nbsp;dokumentace mluví o&nbsp;testech v&nbsp;QEMU.</p>

<h2>Kdo za tím stojí a&nbsp;jak je to staré</h2>

<p>Za projektem je organizace LiberSoft, která na GitHubu vede i&nbsp;decentralizované sdílení souborů <a href="/clanek/libershare-lish">LiberShare</a> a&nbsp;starší komunikační projekt Yellow. Všechno pod licencí Unlicense, tedy uvolněné do veřejného vlastnictví. Kontaktní adresa uvedená na webu vede do Liberlandu, což je mikrostát na sporném území u&nbsp;Dunaje. Web i&nbsp;návrhové dokumenty existují v&nbsp;české verzi a&nbsp;analytiku měří česká služba, takže čeští autoři jsou pravděpodobní. Konkrétní jména ale nikde uvedená nejsou a&nbsp;nepodařilo se mi je ověřit.</p>

<p>Repozitář vznikl 17.&nbsp;června 2026. Za šest týdnů do něj přibylo přes sedm set commitů, tempo se drží mezi osmdesáti a&nbsp;stošedesáti commity týdně a&nbsp;poslední změna je z&nbsp;dneška. Přispěvatel je ale jediný účet, forků nula, otevřených issues nula. Návrhový dokument má přes osmdesát kilobajtů textu a&nbsp;existuje v&nbsp;angličtině i&nbsp;češtině, k&nbsp;tomu je popsaný model hrozeb, vlastní jazyk pro definici rozhraní a&nbsp;formát nativního souborového systému. Na projekt starý šest týdnů je to nezvykle důkladná dokumentace.</p>

<h2>Co chybí a&nbsp;kde je riziko</h2>

<p>Vydání zatím žádné. Tlačítko „Stáhnout“ na webu vede na stránku vydání na GitHubu, která je prázdná, a&nbsp;projekt to sám přiznává větou, že vydání se publikují, jakmile budou k&nbsp;dispozici. Kdo si chce systém zkusit, musí ho přeložit ze zdrojových kódů.</p>

<p>Model hrozeb otevřeně vyjmenovává, co ještě řešené není: ověřený start systému a&nbsp;podepsaný obraz, postranní kanály typu Spectre, fyzické útoky na hardware, šifrované svazky ani formální verifikace jádra. Jádro je tedy důvěryhodné, ale nedokázané. To není podvod, je to poctivé přiznání stavu, ale mění to význam slova „bezpečný“ v&nbsp;marketingovém popisu.</p>

<p>Plán vývoje má sedm fází. Grafické rozhraní a&nbsp;desktop jsou až v&nbsp;páté, kompatibilita s&nbsp;POSIX a&nbsp;podpora reálných počítačů ve čtvrté. Aktuální prioritou je fáze pro takzvané appliance, tedy jednoúčelová síťová zařízení. Cesta k&nbsp;systému, na kterém by šlo pracovat, je pořád dlouhá.</p>

<p>Riziko číslo jedna je podle mého názoru jediný přispěvatel. Kód, dokumentace i&nbsp;web stojí na jednom účtu, a&nbsp;pokud ten přestane, nemá projekt kdo převzít. Slabinou je i&nbsp;licence Unlicense: dává maximální volnost, ale patenty neřeší nijak, což velké firmy u&nbsp;systémového softwaru sledují.</p>

<p>Pozornost zvenčí je zatím minimální. Odkaz na Hacker News z&nbsp;8.&nbsp;července získal jediný bod a&nbsp;jediný komentář, ve kterém se čtenář ptá, čím se LiberSystem liší od existujících mikrojader v&nbsp;Rustu, jako je Redox, Tock nebo Xous. Odpověď tam nepřišla. Vlákno na fóru jazyka Rust má pár reakcí. České weby, které o&nbsp;projektu psaly, převzaly texty z&nbsp;jeho vlastních stránek a&nbsp;nic neověřovaly.</p>

<h2>Pro koho to dnes je</h2>

<p>Nasadit LiberSystem na cokoliv, na čem záleží, dnes nejde a&nbsp;autoři to netvrdí. Pokud hledáte bezpečnější počítač na práci, tohle není odpověď a&nbsp;nebude jí ani příští rok. Zajímavý je jinak: jako čitelně napsaný a&nbsp;rychle rostoucí příklad toho, jak by vypadal systém postavený od začátku na kapabilitách a&nbsp;typovaných objektech. Kdo se učí psát jádra nebo ho zajímá návrh operačních systémů, dostane osmdesát kilobajtů promyšleného textu zdarma a&nbsp;k&nbsp;tomu kód, který nabootuje.</p>

<p>Zdroje: <a href="https://libersystem.com/" rel="noopener">web projektu LiberSystem</a>, <a href="https://github.com/libersoft-org/libersystem" rel="noopener">repozitář na GitHubu</a> včetně návrhového dokumentu a&nbsp;modelu hrozeb, a&nbsp;<a href="https://news.ycombinator.com/item?id=48835708" rel="noopener">diskuse na Hacker News</a>. Údaje o&nbsp;stáří repozitáře, počtu commitů a&nbsp;přispěvatelů pocházejí z&nbsp;veřejného rozhraní GitHubu ke dni 27.&nbsp;července 2026.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-08-libersystem-d1589142.png" length="115759" type="image/png" />
		</item>
		<item>
			<title>Specifikace Vulkanu přidala volbu mezi menším obrazem v paměti a rychlejším přístupem</title>
			<link>https://tech-blog.chatujme.cz/clanek/vulkan-1-4-358-image-tiling-control</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/vulkan-1-4-358-image-tiling-control</guid>
			<pubDate>Fri, 24 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<category>Hry</category>
			<description><![CDATA[Khronos vydal 31. července aktualizaci specifikace Vulkanu 1.4.358 s jediným novým rozšířením. VK_EXT_image_tiling_control dovoluje u každého obrazu zvlášť říct, jestli má ovladač zvolit uspořádání dat, které šetří paměť, nebo to, které zrychluje přístup. Dosud to bylo na ovladači a aplikace do jeho volby neviděla.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-vulkan-image-tiling-control-1fbc9723.jpg" alt="Grafický čip AMD Fiji s pamětí HBM na společné podložce"><figcaption>Grafický čip a&nbsp;paměť na jedné podložce. Jak se v&nbsp;ní obrazová data poskládají, rozhodoval dosud ovladač sám. Foto: C. Spille/pcgameshardware.de, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Skupina Khronos vydala <a href="https://github.com/KhronosGroup/Vulkan-Docs/commit/a02cd20287" rel="noopener" target="_blank">31.&nbsp;července aktualizaci specifikace Vulkanu</a> s&nbsp;označením 1.4.358. Přibylo v&nbsp;ní jediné nové rozšíření, zato takové, pod kterým jsou podepsaní lidé z&nbsp;AMD, Valve, Samsungu, NVIDIE, Intelu a&nbsp;Nintenda: <code>VK_EXT_image_tiling_control</code>.</p>

<h2>Dvě hodnoty, za kterými se skrývá víc možností</h2>

<p>Obrazem (<code>VkImage</code>) se ve Vulkanu myslí blok obrazových dat v&nbsp;paměti grafické karty – textura, plocha, na kterou se vykresluje, hloubková mapa. Jak se ta data v&nbsp;paměti poskládají, dosud řídily dvě hodnoty. <code>VK_IMAGE_TILING_LINEAR</code> je ukládá po řádcích za sebou, jak by je člověk psal na papír. <code>VK_IMAGE_TILING_OPTIMAL</code> nechává uspořádání na ovladači: ten si obraz rozseká na dlaždice a&nbsp;poskládá je tak, aby bylo čtení sousedních bodů rychlejší.</p>

<p>Návrhový dokument rozšíření to popisuje jako typický kompromis mezi místem a&nbsp;časem: lineární uspořádání šetří paměť, optimální zrychluje přístup. Potíž je v&nbsp;tom, co se skrývá pod druhou z&nbsp;těch hodnot. Karta jich totiž může umět víc – několik různých optimálních uspořádání, každé s&nbsp;jinou spotřebou paměti a&nbsp;jinou rychlostí – a&nbsp;která se použije, si ovladač vybírá sám. Aplikace o&nbsp;té volbě neví a&nbsp;nemá ji jak ovlivnit.</p>

<p>Podle návrhu má přitom vývojář navíc informace, ke kterým se ovladač nedostane: ví, jak se obraz bude používat, a&nbsp;zná cílovou platformu. „Byly zjištěny případy, kdy ovladač nedokáže bez dalších podrobností zvolit nejlepší možnost pro všechny aplikace,“ stojí v&nbsp;dokumentu (přeloženo z&nbsp;angličtiny). Dosavadní náhrada byla nepřímá – měnit parametry vytvoření obrazu a&nbsp;pak měřit, jestli se uspořádání vůbec změnilo. Že ladění a&nbsp;měření vadí vývojářům shaderů ze všeho nejvíc, ukázala i&nbsp;<a href="/clanek/khronos-pruzkum-vyvojari-shaderu">anketa Khronosu mezi více než čtyřmi sty z&nbsp;nich</a>.</p>

<h2>Tři hodnoty místo zkoušení</h2>

<p>Rozšíření přidává strukturu <code>VkImageTilingControlCreateInfoEXT</code>, kterou aplikace připojí k&nbsp;popisu vznikajícího obrazu. Obsahuje jedinou položku a&nbsp;ta nabývá tří hodnot:</p>

<ul>
<li><code>VK_IMAGE_TILING_CONTROL_DEFAULT_EXT</code> – chová se stejně, jako by struktura nebyla připojená vůbec;</li>
<li><code>VK_IMAGE_TILING_CONTROL_MIN_SIZE_EXT</code> – ovladač má zvolit uspořádání s&nbsp;nejmenší spotřebou paměti;</li>
<li><code>VK_IMAGE_TILING_CONTROL_MAX_PERFORMANCE_EXT</code> – má zvolit to nejrychlejší, i&nbsp;za cenu vyšší spotřeby.</li>
</ul>

<p>Vedle toho přibývá příznak <code>imageTilingControl</code>; podle návrhu ho musí karta podporovat vždy, když podporuje samotné rozšíření. Návrh vysvětluje i&nbsp;to, proč nestačil jeden přepínač: u&nbsp;pouhého zapnuto/vypnuto by se muselo dodat zvlášť zjišťování výchozího chování, a&nbsp;to se může časem měnit.</p>

<h2>Záruka platí jen v&nbsp;jednom směru</h2>

<p>Hodnota pro nejmenší velikost je závazná: paměťový nárok obrazu s&nbsp;ní nesmí být větší než u&nbsp;zbylých dvou. U&nbsp;hodnoty pro nejvyšší rychlost žádný slib není. Návrh to říká rovnou – doba přístupu k&nbsp;obrazu závisí na příliš mnoha věcech, takže ovladač udělá, co může. Obě volby se navíc u&nbsp;některých obrazů srovnají do téhož výsledku; třeba tam, kde rozměry přesně vycházejí na velikost dlaždice, žádný kompromis neexistuje.</p>

<p>Zato se volba musí promítnout do dotazů, kterými si aplikace zjišťuje velikost a&nbsp;rozvržení obrazu ještě před jeho vytvořením. Jinak by si vývojář vyžádal úsporné uspořádání a&nbsp;paměť si naplánoval podle čísel platných pro jiné.</p>

<h2>Zarovnání šlo ovlivnit už dva roky, uspořádání ne</h2>

<p>Ve specifikaci je rozšíření <code>VK_MESA_image_alignment_control</code>, jehož jediným autorem je Hans-Kristian Arntzen z&nbsp;Valve; popis rozšíření nese datum poslední úpravy 3.&nbsp;května 2024. Řeší příbuzný problém z&nbsp;druhé strany: aplikace jím žádá o&nbsp;menší zarovnání obrazu v&nbsp;paměti, než jaké by karta jinak vyžadovala. Popis uvádí jako příklad vrstvení nad rozhraním Direct3D 12, kde se u&nbsp;umísťovaných prostředků počítá s&nbsp;určitým zarovnáním a&nbsp;napodobit to jinak znamená plýtvat výplní.</p>

<p>Nové rozšíření to starší neruší a&nbsp;Arntzen je podepsaný i&nbsp;pod ním. Když aplikace určí strop zarovnání, musí to omezit i&nbsp;výběr uspořádání – obojí platí zároveň.</p>

<h2>Co dalšího v&nbsp;1.4.358 je</h2>

<p>Zbytek aktualizace jsou opravy a&nbsp;upřesnění: rozvolnění požadavku na jedinečnost identifikátoru paměťového objektu v&nbsp;hlášení o&nbsp;alokacích, upřesnění, že rozložení <code>VK_IMAGE_LAYOUT_PREINITIALIZED</code> se týká jen lineárních obrazů, nebo dovolení, aby dotaz na počet ořezaných útvarů přeskočil zdegenerované trojúhelníky. Vydání také přebírá změny z&nbsp;bezpečnostně kritické varianty Vulkan SC 1.0.22.</p>

<p>Předchozí aktualizace 1.4.357 vyšla 17.&nbsp;července, mezi oběma je tedy čtrnáct dní. Stejnou dvoutýdenní pauzu bez aktualizace specifikace zmiňuje i&nbsp;server Phoronix.</p>

<h2>Ve specifikaci ano, v&nbsp;ovladači zatím neznámo</h2>

<p>Rozšíření nese pořadové číslo 688 a&nbsp;revizi 1 z&nbsp;19.&nbsp;června 2026; jako autor je u&nbsp;něj uvedený Noah Fredriks z&nbsp;AMD. Je to rozšíření zařízení, tedy volitelná část rozhraní – aplikace si musí zjistit, jestli ho konkrétní karta a&nbsp;ovladač nabízejí. Jestli už to některý z&nbsp;nich umí, se ze seznamu změn nepozná – o&nbsp;implementacích v&nbsp;něm není nic.</p>

<p>Strojový popis rozhraní, ze kterého se generují hlavičkové soubory, dnes vede 472 rozšíření označených jako podporovaná pro Vulkan. Sto padesát jedna z&nbsp;nich má předponu <code>EXT</code> a&nbsp;149 předponu <code>KHR</code>; příloha specifikace ta první označuje za vícedodavatelská a&nbsp;ta druhá za khronosovská.</p>

<p>Zdroje: <a href="https://github.com/KhronosGroup/Vulkan-Docs/commit/a02cd20287" rel="noopener" target="_blank">seznam změn ve Vulkanu 1.4.358</a>, <a href="https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.4.358/proposals/VK_EXT_image_tiling_control.adoc" rel="noopener" target="_blank">návrhový dokument rozšíření</a>, <a href="https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.4.358/appendices/VK_EXT_image_tiling_control.adoc" rel="noopener" target="_blank">jeho příloha ve specifikaci</a>, <a href="https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.4.358/appendices/VK_MESA_image_alignment_control.adoc" rel="noopener" target="_blank">příloha k&nbsp;VK_MESA_image_alignment_control</a> a&nbsp;<a href="https://www.phoronix.com/news/Vulkan-1.4.358" rel="noopener" target="_blank">zpráva serveru Phoronix</a>. Počty rozšíření jsou spočítané ze <a href="https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.4.358/xml/vk.xml" rel="noopener" target="_blank">souboru vk.xml</a> ve stejné verzi.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-vulkan-image-tiling-control-1fbc9723.jpg" length="72161" type="image/jpeg" />
		</item>
		<item>
			<title>Port ovladače RADV na Windows rozběhal Counter-Strike 2. Tuhle fázi zaplatil Valve</title>
			<link>https://tech-blog.chatujme.cz/clanek/radv-vulkan-ovladac-na-windows</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/radv-vulkan-ovladac-na-windows</guid>
			<pubDate>Thu, 23 Jul 2026 09:37:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Konzultační firma Collabora popsala 28. července, jak daleko se dostal pokus přenést RADV, otevřený ovladač Vulkan pro grafické karty AMD, z Linuxu na Windows. Práci na téhle fázi platí Valve. Ovladač zatím neprochází certifikačními testy, ale první hru už rozběhal.]]></description>
			<content:encoded><![CDATA[<p>Grafické karty AMD mají v&nbsp;Linuxu ovladač Vulkan, který nepsal jejich výrobce: RADV z&nbsp;projektu Mesa. Postupně se z&nbsp;něj stala výchozí volba a&nbsp;AMD kvůli němu ukončilo vlastní alternativu postavenou na knihovně PAL, aby své otevřené úsilí soustředilo právě do Mesy. Na Windows přitom majitelé Radeonů dodnes nemají nic jiného než uzavřený ovladač od AMD. Konzultační firma Collabora zveřejnila 28.&nbsp;července zprávu o&nbsp;pokusu ten rozdíl smazat. V&nbsp;poděkování na konci textu uvádí, že tuhle fázi práce zaplatil Valve.</p>

<figure><img src="/uploads/foto-m2-radv-windows-radeon-2585d478.jpg" alt="Grafická karta Radeon RX 7900 XT se třemi ventilátory"><figcaption>Radeon RX 7900 XT, tedy karta, na které Collabora port zkoušela. Foto: Shinobara, Wikimedia Commons (CC BY 4.0)</figcaption></figure>

<h2>Proč by měl otevřený ovladač zajímat i&nbsp;uživatele Windows</h2>

<p>Autor zprávy Louis-Francis Ratté-Boulianne vypisuje, co by se získalo: jedna kódová základna pro obě platformy, snazší ladění a&nbsp;pokusy, rychlejší opravy a&nbsp;možnost, aby chyby hlásili nebo opravy posílali lidé mimo AMD, třeba vývojáři her. Oprava by pak platila bez ohledu na operační systém.</p>

<p>Valve na tom má praktický zájem. Firma už dnes platí několik vývojářů pracujících na RADV a&nbsp;na dalších částech linuxové grafické vrstvy; podle serveru Phoronix má ovladač velký podíl na tom, jak dopadl Steam Deck a&nbsp;nově Steam Machine.</p>

<h2>Privátní data, která nikdo nepopsal</h2>

<p>Projekt navazuje na práci Faith Ekstrand. Ta proveditelnost zkoumala jako první a&nbsp;výsledky přednesla na konferenci XDC 2024. Podstatné zjištění: od Windows 10 existuje rozhraní WDDM2, které slušně popisuje, jak spolu má mluvit ovladač v&nbsp;uživatelském prostoru (UMD) a&nbsp;ovladač v&nbsp;jádře systému (KMD).</p>

<p>Háček je v&nbsp;tom, že spousta volání s&nbsp;sebou nese privátní data výrobce. Jsou to neprůhledné bloby, jejichž obsah si určuje ovladač sám, takže obě poloviny zůstávají pevně svázané a&nbsp;rozhraní mezi nimi není nikde zdokumentované. Ekstrand kvůli tomu napsala nástroj wddm2-pdd-re, který u&nbsp;vybraných aplikací D3D12 zaznamenává volání i&nbsp;obsah těch dat. Zpětným rozborem se dostala tak daleko, že RADV dokázal poslat práci uzavřenému ovladači v&nbsp;jádře, a&nbsp;na obrazovce se jí nakonec otočil trojrozměrný model.</p>

<h2>Od modelu k&nbsp;první hře</h2>

<p>Collabora si k&nbsp;tomu vytkla tři cíle: ubrat napevno zadané hodnoty, aby ovladač zvládl různý hardware, rozběhat ho přímo na Windows místo v&nbsp;prostředí WSL a&nbsp;hlavně ho stabilizovat. Dosavadní verze totiž padala po dvou minutách testů deqp-vk. Přibylo zpracování command streamu a&nbsp;synchronizace, dále sparse bindings, tessellation, task shadery a&nbsp;dynamické zjišťování vlastností karty.</p>

<p>Zpráva výsledek neuhlazuje. Ovladač pořád není konformní, i&nbsp;když úspěšnost testů podle Collabory výrazně stoupla. Zato na něm běží první hra: Counter-Strike 2. Podle zprávy si to s&nbsp;tímhle ovladačem může zkusit každý, stačí hru spustit s&nbsp;parametrem <code>-vulkan</code>.</p>

<h2>Kde to drhlo</h2>

<p>Collabora pracovala na Radeonu RX 7900 XT, kdežto Ekstrand na RX 7800 XT, a&nbsp;rozdíly mezi kartami znamenaly, že se cizí výsledky dlouho nedařilo zopakovat. Jakmile se zkusilo něco víc než vyplnit plochu napevno zadanou barvou, karta se zasekla. Nástroje na ladění takových zásek na Windows nejsou, takže si je museli postavit sami: z&nbsp;reverzní utility udělali plnou logovací vrstvu WDDM2, která umí rozebrat libovolnou aplikaci běžící pod oficiálním ovladačem Vulkan, a&nbsp;přidali výpis command streamů, registrů a&nbsp;kódu shaderů.</p>

<p>Druhá potíž byla přízemnější. Mesa se vyvíjí hlavně proti překladačům GCC a&nbsp;Clang a&nbsp;spoléhá na předpoklady, které u&nbsp;Microsoftího MSVC neplatí. Zpráva jmenuje zacházení s&nbsp;výčtovými typy: MSVC umí hodnotu vzít jako znaménkovou a&nbsp;omezit ji na 32 bitů, což vede k&nbsp;překvapivému chování.</p>

<h2>Bez AMD se dál nepokročí</h2>

<p>Největší otevřená otázka je právě rozhraní k&nbsp;uzavřenému ovladači v&nbsp;jádře. Psát vlastní KMD Collabora za reálnou možnost nepovažuje, takže musí mluvit s&nbsp;tím od AMD. Dnes to stojí na zpětně odvozené znalosti privátních datových struktur, a&nbsp;to je křehké ze své podstaty: uživatelská a&nbsp;jádrová část se dodávají jako pár, žádnou zpětnou kompatibilitu si neslibují a&nbsp;struktury se můžou změnit s&nbsp;libovolnou novou verzí ovladače bez ohlášení.</p>

<p>Aby byl RADV na Windows opravdu stabilní a&nbsp;udržovatelný, potřebuje podle Collabory jedno ze dvou. Buď stabilní a&nbsp;zdokumentované rozhraní k&nbsp;uzavřenému ovladači v&nbsp;jádře, nebo mezivrstvu, která komunikaci zprostředkuje a&nbsp;udrží tvar i&nbsp;tehdy, když se bloby pod ní změní.</p>

<p>Druhá nedodělaná oblast je zobrazení hotového snímku. RADV na Windows zvládá zatím jen pomalejší cestu přes procesor. Použití swapchainů DXGI by vyžadovalo umět importovat obraz z&nbsp;D3D12 a&nbsp;poslední stupeň, výměna snímků bez kopírování, by podle zprávy mohl u&nbsp;aplikací neomezených výkonem karty přinést až trojnásobek. Ten krok už se ale neobejde bez přímé účasti AMD a&nbsp;nejspíš i&nbsp;Microsoftu.</p>

<h2>Co je vidět v&nbsp;repozitáři</h2>

<p>Kód leží ve větvi <code>wddm2</code> ve vlastní kopii Mesy na GitLabu freedesktop.org. Commitů s&nbsp;datem 23.&nbsp;července 2026 je tam čtyřicet, třiatřicet od Ratté-Boulianna a&nbsp;sedm od Ekstrand. Větev končí commitem, jehož název začíná slovem HACK, což o&nbsp;stavu práce vypovídá podobně jako celá zpráva.</p>

<p>Podle nás je tohle zajímavější jako signál než jako software. Použitelný ovladač z&nbsp;toho zatím není a&nbsp;Collabora si to nenamlouvá; smysl té práce je ukázat AMD, že o&nbsp;otevřený Vulkan na Windows je zájem, a&nbsp;že dokud výrobce nedodá popsané rozhraní, zbývá jen zpětné odvozování cizích datových struktur.</p>

<p>Zdroje: <a href="https://www.collabora.com/news-and-blog/news-and-events/cracking-windows-open-porting-radv-to-win32.html" target="_blank" rel="noopener">Cracking Windows Open: Porting RADV to WIN32</a> na blogu Collabory, zpráva <a href="https://www.phoronix.com/news/Valve-Sponsors-RADV-Windows" target="_blank" rel="noopener">Valve Sponsors Work Bringing Open-Source RADV Driver To Windows</a> na Phoronixu a&nbsp;<a href="https://gitlab.freedesktop.org/lfrb/mesa/-/tree/wddm2" target="_blank" rel="noopener">větev wddm2</a> v&nbsp;repozitáři Mesy.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-radv-windows-radeon-2585d478.jpg" length="246425" type="image/jpeg" />
		</item>
		<item>
			<title>Unity ohlásilo verzi 7 na rok 2027. Slib, že se nic nerozbije, má výjimky</title>
			<link>https://tech-blog.chatujme.cz/clanek/unity-7-ohlaseni</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/unity-7-ohlaseni</guid>
			<pubDate>Tue, 21 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<category>Hry</category>
			<description><![CDATA[Unity ohlásilo 21. července na konferenci Unite Seoul plán sedmé generace svého herního nástroje. Beta má být v prosinci, vydání v prvním čtvrtletí 2027. Firma slibuje, že se projekty z šestky přenesou bez přestavby; její vlastní příručka k novému běhovému prostředí přitom vyjmenovává změny, které starý kód rozbijí.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-unity-7-ohlaseni-6911e5c8.jpg" alt="Vstup na Game Developers Conference 2019 v sanfranciském Moscone Center"><figcaption>Vstup na Game Developers Conference 2019 v&nbsp;sanfranciském Moscone Center. Foto: Official GDC, Wikimedia Commons (CC BY 2.0)</figcaption></figure>

<p>Unity je po Unrealu druhý nejpoužívanější nástroj na stavbu her. Na konferenci Unite Seoul v&nbsp;Jižní Koreji firma 21.&nbsp;července 2026 zveřejnila plán vývoje sedmé generace. Není to vydání ani beta &ndash; je to rozvrh, co a&nbsp;kdy přijde.</p>

<h2>Termíny a&nbsp;čísla, která firma uvedla</h2>

<p>Podle tiskové zprávy začne uzavřené testování bety v&nbsp;prosinci 2026 a&nbsp;plné vydání je plánované na první čtvrtletí 2027. Server Game Developer, který o&nbsp;oznámení psal nezávisle, uvádí opatrněji „začátek roku 2027“.</p>

<p>Z&nbsp;výkonnostních údajů zpráva jmenuje jediné číslo: sestavení shaderů, tedy programů pro grafickou kartu, má být až o&nbsp;90&nbsp;%&nbsp;rychlejší než v&nbsp;šestce. Zbytek slibů je popisný &ndash; „téměř okamžitý“ přechod do herního režimu a&nbsp;znovunačtení kódu jen pro to, co se opravdu změnilo.</p>

<p>Novinky firma rozdělila do pěti okruhů: rychlejší práce v&nbsp;editoru, otevřenější okolí (nové rozhraní příkazové řádky a&nbsp;veřejné programové rozhraní), grafika s&nbsp;osvětlením Surface Cache GI, nástroj Unity Vector na výdělek ze hry a&nbsp;slib, že se nic nerozbije. Součástí druhého okruhu je i&nbsp;bezplatné napojení přes protokol MCP, kterým se do vývoje mají zapojit <a href="/clanek/debian-hlasovani-llm">programovací agenti postavení na jazykových modelech</a>. Game Developer k&nbsp;tomu cituje z&nbsp;prezentace formulaci, že volba, jestli je tým použije, „je vždy na týmu, ne na platformě“.</p>

<p>Prezident a&nbsp;výkonný ředitel Unity Matt Bromberg oznámení uvedl větou, kterou překládáme: „Vývoj her se mění rychleji než kdykoli v&nbsp;historii. Budoucnost nepatří největšímu týmu, ale těm, kdo dokážou novou technikou vytvořit něco svébytného a&nbsp;najít publikum.“</p>

<h2>Skutečná změna je pod kapotou</h2>

<p>Nejpodstatnější věc na sedmičce v&nbsp;tiskové zprávě zaniká pod slovem „modernizace“. Unity opouští Mono &ndash; volnou implementaci prostředí .NET, na které se hry v&nbsp;Unity dosud spoléhaly &ndash; a&nbsp;přechází na CoreCLR, tedy na běhové prostředí přímo od Microsoftu. Firma si od toho slibuje vyšší výkon a&nbsp;kratší čekání při překladu kódu.</p>

<p>Tenhle přechod se přitom nechystá teprve teď. Vlastní příručka Unity <em>Path to CoreCLR, 2026: Upgrade Guide</em>, zveřejněná na vývojářském fóru firmy 26.&nbsp;března 2026, popisuje tentýž krok a&nbsp;váže ho k&nbsp;verzi 6.8, ne k&nbsp;sedmičce. Uvádí i&nbsp;verzi prostředí: .NET&nbsp;10.</p>

<h2>Kde slib „bez přepisování“ naráží</h2>

<p>Marketingové heslo oznámení zní, že projekty, dovednosti i&nbsp;kód přejdou dál hladce a&nbsp;bez přestavby. Táž příručka k&nbsp;přechodu na CoreCLR je opatrnější. Doslova říká, že změna bude „z&nbsp;velké části zdrojově kompatibilní se stávajícími projekty, ale některé podstatné rozbíjející změny jsou v&nbsp;plánu“ &ndash; a&nbsp;pak je vyjmenovává:</p>

<ul>
<li>CoreCLR přísněji vynucuje pravidla přístupnosti typů, takže kód, který si sahal, kam neměl, přestane překládat.</li>
<li>Třída BinaryFormatter je v&nbsp;.NET&nbsp;10 označená za zastaralou kvůli dlouholetým bezpečnostním problémům.</li>
<li>Statické konstruktory se nově volají při prvním použití dat nebo statických polí daného typu, ne při prvním překladu metod za běhu. Kdo se spoléhal na dosavadní pořadí, dostane jiné.</li>
<li>Vlastnost Assembly.Location vrátí prázdný řetězec.</li>
</ul>

<p>Rozpor to není &ndash; obojí může platit současně, protože Unity samo čeká, že přechod bude z&nbsp;velké části zdrojově kompatibilní. Ale kdo čte jen titulek oznámení, dozví se z&nbsp;něj polovinu. Experimentální podoba nového běhového prostředí je k&nbsp;dispozici už v&nbsp;alfě větve Unity 6.7 LTS; příručka u&nbsp;ní výslovně píše, že podporovaná není.</p>

<h2>Jméno, které loni v&nbsp;prosinci zmizelo</h2>

<p>Sedmička není nový nápad. Server GameFromScratch napsal 2.&nbsp;prosince 2025 po konferenci Unite v&nbsp;Barceloně, že v&nbsp;tehdejším plánu vývoje o&nbsp;sedmičce nepadla ani zmínka, a&nbsp;vyvodil z&nbsp;toho, že projekt skončil. Podle téhož článku se většina funkcí slibovaných pro sedmičku měla objevit v&nbsp;řadě 6.x a&nbsp;část z&nbsp;nich, například nové animační nástroje, byla zrušená úplně.</p>

<p>Unity ale zrušení nikdy neoznámilo &ndash; komentátoři ho odvodili z&nbsp;toho, že název na pódiu nezazněl. Tentýž server teď k&nbsp;návratu jména poznamenává, že sedmička je v&nbsp;časové ose víceméně jen Unity 6.8. To sedí s&nbsp;tím, co stojí v&nbsp;příručce firmy: přechod na CoreCLR se plánoval pod číslem 6.8.</p>

<h2>Kde Unity mezi vývojáři stojí</h2>

<p>Průzkum State of the Game Industry, který organizátoři konference GDC vydali letos na základě odpovědí více než 2&nbsp;300 lidí z&nbsp;oboru, staví Unity na druhé místo. Za hlavní nástroj označilo Unreal Engine 42&nbsp;%&nbsp;dotázaných, Unity 30&nbsp;%. To je hodnocení postavení na trhu, ne měření kvality &ndash; průzkum se ptá, s&nbsp;čím lidé pracují, ne co je lepší.</p>

<p>Unity si navíc pořád nese následky poplatku Runtime Fee, kterým chtěla účtovat za instalace her a&nbsp;který po odporu vývojářů zrušila. Slib „nic vám nerozbijeme“ v&nbsp;tomhle světle není jen technické sdělení.</p>

<p>Co z&nbsp;oznámení opravdu platí, se pozná v&nbsp;prosinci, až začne uzavřené testování bety. Do té doby je Unity 7 rozvrh, ne nástroj.</p>

<h2>Zdroje</h2>

<ul>
<li><a href="https://finance.yahoo.com/technology/articles/unity-7-roadmap-revealed-unite-020000607.html" rel="noopener">Unity 7 Roadmap Revealed At Unite Seoul</a> &ndash; přetisk tiskové zprávy Unity z&nbsp;21.&nbsp;července 2026</li>
<li><a href="https://www.gamedeveloper.com/programming/unity-unveils-unity-7-roadmap-with-update-path-that-won-t-break-your-build" rel="noopener">Game Developer: Unity unveils Unity 7 roadmap</a></li>
<li><a href="https://discussions.unity.com/t/path-to-coreclr-2026-upgrade-guide/1714279" rel="noopener">Path to CoreCLR, 2026: Upgrade Guide</a> &ndash; příručka Unity z&nbsp;26.&nbsp;března 2026</li>
<li><a href="https://gamefromscratch.com/unity-7-is-dead/" rel="noopener">GameFromScratch: Unity 7 is Dead</a> (2.&nbsp;prosince 2025) a&nbsp;<a href="https://gamefromscratch.com/unity-7-is-back/" rel="noopener">Unity 7 is Back</a></li>
<li><a href="https://gdconf.com/article/gdc-2026-state-of-the-game-industry-reveals-impact-of-layoffs-generative-ai-and-more/" rel="noopener">GDC 2026 State of the Game Industry</a></li>
</ul>
]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-unity-7-ohlaseni-6911e5c8.jpg" length="320477" type="image/jpeg" />
		</item>
		<item>
			<title>PostgreSQL 19 je ve druhé betě, grafové dotazy zvládne nad běžnými tabulkami</title>
			<link>https://tech-blog.chatujme.cz/clanek/postgresql-19-grafove-dotazy</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/postgresql-19-grafove-dotazy</guid>
			<pubDate>Thu, 16 Jul 2026 10:41:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Vývojáři PostgreSQL vydali 16. července 2026 druhou betu verze 19. Největší novinkou celé verze je SQL/PGQ, tedy dotazování grafů přímo nad obyčejnými relačními tabulkami. Ostré vydání projekt plánuje na září nebo říjen.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-04-graf-site-f6b6c871.jpg" alt="Vizualizace grafu s 800 vrcholy a 10 000 hranami, barva označuje mezilehlost"><figcaption>Graf s&nbsp;800 vrcholy a&nbsp;10 000 hranami. Právě takové struktury umí PostgreSQL 19 dotazovat, aniž by data musela opustit relační tabulky. Foto: Martin Grandjean, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Vývojářské sdružení PostgreSQL Global Development Group vydalo <strong>16.&nbsp;července 2026</strong> druhou betu databáze <strong>PostgreSQL 19</strong>. Beta není hotové vydání a&nbsp;projekt to říká rovnou: „některé podrobnosti vydání se během beta období mohou změnit“ (přeloženo z&nbsp;angličtiny). Ostrou verzi čeká na <strong>září nebo říjen 2026</strong> a&nbsp;do té doby počítá s&nbsp;dalšími betami a&nbsp;s&nbsp;jednou či více kandidátskými verzemi.</p>

<p>Za pozornost stojí hlavně to, co se do devatenáctky dostalo už v&nbsp;první betě ze <strong>4.&nbsp;června 2026</strong>. Jednou větou: relační databáze se naučila dotazovat grafy.</p>

<h2>Graf bez grafové databáze</h2>

<p>Grafem se v&nbsp;informatice myslí struktura z&nbsp;uzlů a&nbsp;spojnic mezi nimi – lidé a&nbsp;jejich známosti, zákazníci a&nbsp;jejich objednávky, letiště a&nbsp;linky. Data v&nbsp;tomhle tvaru se v&nbsp;běžném SQL dotazují mizerně: každý další krok po spojnici znamená další JOIN a&nbsp;dotaz rychle přeroste přes hlavu. Proto vznikly zvláštní grafové databáze a&nbsp;s&nbsp;nimi povinnost udržovat data na dvou místech.</p>

<p>PostgreSQL 19 zavádí podporu <strong>SQL/PGQ</strong>, tedy části normy SQL věnované dotazům nad grafy. Podle oznámení projektu umožňuje „provádět dotazy nad grafy vlastností pomocí syntaxe podle normy SQL“ (přeloženo). Grafem se přitom nestává nic nového – jen se nad existující tabulky položí popis, co je uzel a&nbsp;co spojnice:</p>

<pre><code class="language-sql">CREATE PROPERTY GRAPH myshop
    VERTEX TABLES (
        products,
        customers,
        orders
    )
    EDGE TABLES (
        order_items SOURCE orders DESTINATION products,
        customer_orders SOURCE customers DESTINATION orders
    );</code></pre>

<p>Dotaz se pak píše konstrukcí <code>GRAPH_TABLE</code>, ve které se cesta grafem kreslí šipkami:</p>

<pre><code class="language-sql">SELECT customer_name FROM GRAPH_TABLE (myshop
    MATCH (c IS customers)-[IS customer_orders]-&gt;(o IS orders
        WHERE o.ordered_when = current_date)
    COLUMNS (c.name AS customer_name));</code></pre>

<p>Výsledkem je obyčejná tabulka, se kterou se dá dál pracovat jako s&nbsp;čímkoli jiným. Server <em>InfoQ</em> shrnul význam té změny tak, že PostgreSQL 19 „umožňuje grafové dotazy nad existujícími relačními tabulkami, aniž by byla potřeba samostatná grafová databáze nebo přesun dat“ (přeloženo).</p>

<h2>Přestavba tabulky skoro bez zámku</h2>

<p>Druhou novinkou je příkaz <strong>REPACK</strong>. Ten přepíše celý obsah tabulky do nového souboru na disku bez volného místa navíc, takže se místo po smazaných řádcích vrátí operačnímu systému. Dosud se totéž dělalo příkazem VACUUM FULL, o&nbsp;kterém dokumentace píše, že „vyžaduje zámek ACCESS EXCLUSIVE na každou zpracovávanou tabulku“ (přeloženo) – tedy nejpřísnější druh zámku, po jehož dobu se s&nbsp;tabulkou nedá dělat vůbec nic.</p>

<p>Podstatná je u&nbsp;REPACKu volba <code>CONCURRENTLY</code>. S&nbsp;ní se podle dokumentace tvrdý zámek bere „jen na výměnu souborů tabulky a&nbsp;indexu“; změny, které mezitím do tabulky přišly, se zachytí logickým dekódováním a&nbsp;dohrají předtím, než si příkaz o&nbsp;zámek řekne. Zámek se tak drží jen krátce, ne po celou dobu přestavby.</p>

<h2>Vstupy a&nbsp;výstupy, které se ladí samy</h2>

<p>Asynchronní vstupně-výstupní podsystém přišel do PostgreSQL už v&nbsp;osmnáctce. Zjednodušeně: databáze nečeká na každé čtení z&nbsp;disku, ale zadá jich víc naráz a&nbsp;zpracovává je, jak se vracejí. Nevýhodou bylo, že počet pracovních procesů pro tuhle práci musel správce nastavit ručně.</p>

<p>V&nbsp;devatenáctce se počet škáluje sám podle nových parametrů <code>io_min_workers</code> a&nbsp;<code>io_max_workers</code>. Christophe Pettus ze společnosti PGX k&nbsp;tomu ve svém rozboru z&nbsp;23.&nbsp;dubna 2026 doporučuje správcům, kteří počet nastavovali ručně na osmnáctce, aby to zrušili a&nbsp;vyzkoušeli výchozí hodnoty devatenáctky. Přibyly také parametry <code>io_worker_idle_timeout</code> a&nbsp;<code>io_worker_launch_interval</code> a&nbsp;příkaz <code>EXPLAIN ANALYZE</code> nově umí volbu <code>IO</code>, která ukáže, kolik čtení dotaz opravdu vydal.</p>

<h2>Drobnosti, které potěší denní provoz</h2>

<p>Seznam dalších změn z&nbsp;oznámení první bety je delší, než se sem vejde. Za zmínku stojí čtyři:</p>

<ul>
<li><strong>GROUP BY ALL</strong> – místo ručního vypisování všech neagregovaných sloupců stačí jedno slovo.</li>
<li><strong>WAIT FOR LSN</strong> – příkaz, po kterém replika počká, až k&nbsp;ní dorazí konkrétní místo v&nbsp;protokolu změn. Řeší tím starý problém, kdy aplikace zapíše na hlavní server a&nbsp;hned nato čte z&nbsp;repliky data, která tam ještě nedorazila.</li>
<li><strong>Replikace sekvencí</strong> – logická replikace nově přenáší i&nbsp;hodnoty sekvencí, což podle projektu zjednodušuje povýšení verze za provozu.</li>
<li><strong>Paralelní autovacuum</strong> – automatický úklid smí zapřáhnout víc procesů naráz, počet omezuje nový parametr <code>autovacuum_max_parallel_workers</code>.</li>
</ul>

<p>René Cannaò, zakladatel projektu ProxySQL, označil pro <em>InfoQ</em> za důležitou právě konstrukci WAIT FOR LSN kvůli sladění čtecích replik.</p>

<h2>Co beta 2 opravila</h2>

<p>Druhá beta je oprava chyb, ne nová funkčnost. Její seznam ale prozrazuje, kde to zatím drhne: mezi opravami je „několik oprav nové vlastnosti grafů podle SQL/PGQ“ a „několik oprav nové syntaxe FOR PORTION OF pro časové tabulky“ (přeloženo). Opraveno bylo i&nbsp;to, že proces příkazu REPACK po havarijním ukončení nezmizel, jak měl.</p>

<h2>Beta není vydání</h2>

<p>Hodnocení: SQL/PGQ je z&nbsp;uvedených novinek jediná, která mění, co se s&nbsp;databází vůbec dá dělat. Zbytek jsou vylepšení provozu – a&nbsp;právě ta možná rozhodnou o&nbsp;tom, jestli se firmám vyplatí povýšit. Christophe Pettus to pro <em>InfoQ</em> shrnul tak, že změny v&nbsp;devatenáctce, které nejspíš ovlivní chování v&nbsp;provozu, nejsou ty, o&nbsp;kterých se píše v&nbsp;titulcích (přeloženo).</p>

<p>Do produkčního nasazení nicméně vede ještě dlouhá cesta. Beta slouží k&nbsp;testování, projekt sám upozorňuje, že se podrobnosti můžou změnit, a&nbsp;datum ostrého vydání je zatím jen odhad na září či říjen.</p>

<p>Zdroje: <a href="https://www.postgresql.org/about/news/postgresql-19-beta-2-released-3350/" rel="noopener">oznámení druhé bety PostgreSQL 19</a> a&nbsp;<a href="https://www.postgresql.org/about/news/postgresql-19-beta-1-released-3313/" rel="noopener">oznámení první bety</a> od PostgreSQL Global Development Group, <a href="https://www.infoq.com/news/2026/06/postgresql-19-graph-queries/" rel="noopener">rozbor serveru InfoQ</a>, <a href="https://thebuild.com/blog/async-io-in-postgresql-19-the-year-after/" rel="noopener">text Christopha Pettuse o&nbsp;asynchronním I/O</a> a&nbsp;<a href="https://www.postgresql.org/docs/19/ddl-property-graphs.html" rel="noopener">dokumentace ke grafům vlastností</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-04-graf-site-f6b6c871.jpg" length="291033" type="image/jpeg" />
		</item>
		<item>
			<title>Přes 400 vývojářům shaderů vadí podle průzkumu Khronosu nejvíc ladění a profilování</title>
			<link>https://tech-blog.chatujme.cz/clanek/khronos-pruzkum-vyvojari-shaderu</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/khronos-pruzkum-vyvojari-shaderu</guid>
			<pubDate>Fri, 10 Jul 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<category>Hry</category>
			<description><![CDATA[Konsorcium Khronos zveřejnilo výsledky průzkumu mezi lidmi, kteří píšou shadery. Ladění a profilování označilo za jeden ze tří největších problémů 53 procent z nich, tedy o patnáct procentních bodů víc než druhou položku v pořadí. Průzkum si konsorcium udělalo samo a jeho čísla nikdo nezávisle neověřoval.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-shader-pruzkum-khronos-597b3f5d.jpg" alt="Srovnání scény osvětlené v reálném čase a předem připraveným výpočtem"><figcaption>Táž scéna se světlem počítaným v&nbsp;reálném čase a&nbsp;s&nbsp;osvětlením připraveným předem. Rozdíl mezi nimi je práce, kterou odvede shader. Foto: Adamgmz, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Shader je krátký program, který běží na grafickém čipu – typicky rozhoduje o&nbsp;tom, jakou barvu bude mít každý jednotlivý bod na obrazovce, ale počítá se jím i&nbsp;geometrie nebo úloha, která s&nbsp;vykreslováním nesouvisí vůbec. Píšou ho lidé, kteří dělají hry, filmové efekty i&nbsp;vědecké vizualizace, a&nbsp;čísel o&nbsp;tom, co je na té práci nejtěžší, moc není. Konsorcium <a href="https://www.khronos.org/blog/shader-ecosystem-survey-results-2026" target="_blank" rel="noopener">Khronos Group zveřejnilo 21.&nbsp;července zprávu</a>, která se o&nbsp;to pokouší.</p>

<p>Khronos vydává grafické normy, mimo jiné Vulkan, OpenGL a&nbsp;formát glTF. Dotazník sbíral odpovědi od 16.&nbsp;června do 10.&nbsp;července 2026 a&nbsp;vyplnilo ho přes 400 lidí – grafických programátorů, vývojářů her a&nbsp;enginů, rendering inženýrů a&nbsp;autorů nástrojů.</p>

<h2>Kdo odpovídal</h2>

<p>Největší skupinou byli grafičtí programátoři (35&nbsp;procent) a&nbsp;vývojáři her a&nbsp;herních enginů (29&nbsp;procent). Zbytek tvořili rendering inženýři, autoři middlewaru a&nbsp;nástrojů, výzkumníci a&nbsp;techničtí výtvarníci.</p>

<p>Obor, ve kterém respondenti pracují, potvrzuje, kde se shadery používají nejvíc: hry uvedlo 79&nbsp;procent. Vedle nich se objevil middleware a&nbsp;nástroje (26&nbsp;procent), vědecká vizualizace (16&nbsp;procent), průmyslová vizualizace, film a&nbsp;rozšířená realita.</p>

<p>Zajímavější je rozložení platforem. Windows používá 88&nbsp;procent dotázaných, Linux 74&nbsp;procent a&nbsp;macOS 35&nbsp;procent. Sedmdesát čtyři procent u&nbsp;Linuxu je na obor, kde vládnou hry pro Windows, hodně – Khronos to sám v&nbsp;textu označuje za nápadné a&nbsp;vykládá si to jako známku toho, že velká část lidí píše shadery mimo hry, ve výpočtech a&nbsp;strojovém učení.</p>

<h2>Ladění bolí nejvíc</h2>

<p>Nejsilnější výsledek celého průzkumu je jednoznačný. Ladění a&nbsp;profilování shaderů zařadilo mezi tři největší problémy 53&nbsp;procent respondentů, což je o&nbsp;víc než patnáct procentních bodů před druhou položkou v&nbsp;pořadí.</p>

<p>Khronos se ptal i&nbsp;na míru: jak bolestivé je dnes ladění a&nbsp;profilování na cílových platformách, na stupnici od nuly („naprosto v&nbsp;pohodě“) do sta („denní noční můra“). Průměr vyšel 52. Rozložení je ale vychýlené nahoru – nejobsazenější je pásmo 61 až 80, které označilo 31&nbsp;procent lidí, a&nbsp;spolu s&nbsp;pásmem nad 80 dalo hodnocení v&nbsp;horní části stupnice 40&nbsp;procent dotázaných. Přesně sto, tedy maximum, zvolilo třináct lidí.</p>

<p>Proč zrovna ladění, zpráva nerozebírá. Podle nás za tím stojí povaha úlohy: shader běží na grafickém čipu po tisících kopií naráz a&nbsp;klasické nástroje na krokování programu se na něj špatně roubují. Když se výsledek na obrazovce liší od očekávání, vývojář často nemá jak zjistit, která z&nbsp;těch kopií a&nbsp;v&nbsp;jaké chvíli spočítala něco jiného.</p>

<h2>Přenášení mezi platformami</h2>

<p>Druhý opakovaný problém je přenositelnost. Nějaké úsilí na přizpůsobování shaderů mezi platformami, rozhraními nebo nástroji vynakládá 64&nbsp;procent dotázaných. Skoro desetina to popsala jako významný náklad, nebo dokonce jako jednu z&nbsp;největších inženýrských položek vůbec.</p>

<p>Ve volných odpovědích se podle Khronosu opakovala poptávka po ukazatelích, volání funkcí a&nbsp;skutečné práci s&nbsp;adresami – tedy po tom, aby se jazyky pro grafické čipy chovaly spíš jako běžné systémové programovací jazyky.</p>

<h2>Čím se dnes shadery píšou</h2>

<p>Nejrozšířenější zůstává GLSL se 60&nbsp;procenty, následuje HLSL se 41&nbsp;procenty a&nbsp;SPIR-V, které přímo nebo přes nástroje používá 39&nbsp;procent dotázaných. Čtvrtý skončil <a href="https://shader-slang.org" target="_blank" rel="noopener">Slang</a> s&nbsp;34&nbsp;procenty.</p>

<p><strong>U&nbsp;Slangu je namístě jedna poznámka.</strong> Je to projekt, jehož <a href="https://github.com/shader-slang/slang" target="_blank" rel="noopener">repozitář vznikl v&nbsp;roce 2017</a>; dřív patřil NVIDII a&nbsp;dnes ho pod otevřenou správou hostuje sám Khronos, jak uvádí <a href="https://shader-slang.org" target="_blank" rel="noopener">stránky projektu</a> – konsorcium tedy v&nbsp;tomto bodě měří rozšíření vlastního projektu. Neznamená to, že je číslo špatně; znamená to, že ho vydal ten, komu se hodí. Slang měl v&nbsp;době psaní článku na GitHubu necelých pět a&nbsp;půl tisíce hvězd a&nbsp;poslední změna v&nbsp;něm je stará hodiny.</p>

<p>Respondenti u&nbsp;jazyků zmiňovali, že by pomohla stabilnější překladač, lepší dokumentace a&nbsp;celkově příjemnější práce. To platí i&nbsp;pro Slang, u&nbsp;kterého Khronos tuhle zpětnou vazbu uvádí výslovně.</p>

<h2>Co s&nbsp;tím chce Khronos dělat</h2>

<p>Nejvýš hodnocenou možností byl společný standard pro ladění shaderů napříč výrobci – zájem o&nbsp;něj dostal 4,18 bodu z&nbsp;pěti. Ochotu zapojit se do budoucích pracovních skupin nebo připomínkových kol vyjádřilo 73&nbsp;procent dotázaných.</p>

<p>Objevil se i&nbsp;návrh, aby konsorcium vzalo pod křídla další projekty: VCC/Shady, tedy překladač Clang pro Vulkan, a&nbsp;<a href="https://github.com/Rust-GPU/rust-gpu" target="_blank" rel="noopener">Rust-GPU</a>, který má z&nbsp;Rustu udělat jazyk pro psaní shaderů. Část respondentů ale zároveň upozorňovala, že vedle nových věcí je potřeba dál zlepšovat nástroje, které už existují.</p>

<h2>Co z&nbsp;čísel nevyplývá</h2>

<p>Průzkum si zadalo, provedlo i&nbsp;vyhodnotilo jedno konsorcium a&nbsp;zveřejnilo ho na svém blogu. Odpovědi nesbíral nezávislý subjekt a&nbsp;surová data má k&nbsp;dispozici jen Khronos – členům je nabízí jako tabulku na vyžádání, veřejně je k&nbsp;dispozici zpráva se sedmnácti otázkami v&nbsp;PDF.</p>

<p>Vzorek navíc vznikl samovýběrem: odpovídal ten, kdo o&nbsp;dotazníku věděl a&nbsp;chtěl. Přes 400 lidí je na anketu v&nbsp;úzkém oboru slušné číslo, ale není to reprezentativní vzorek všech, kdo shadery píšou. Podle nás jsou proto použitelná spíš pořadí a&nbsp;velké odstupy – jako těch patnáct procentních bodů u&nbsp;ladění – než jednotlivá procenta na desetinu přesně.</p>

<p>Zdroje: <a href="https://www.khronos.org/blog/shader-ecosystem-survey-results-2026" target="_blank" rel="noopener">zpráva Khronos Group o&nbsp;výsledcích průzkumu</a>, stránky projektu <a href="https://shader-slang.org" target="_blank" rel="noopener">Slang</a> a&nbsp;repozitáře <a href="https://github.com/shader-slang/slang" target="_blank" rel="noopener">shader-slang/slang</a> a&nbsp;<a href="https://github.com/Rust-GPU/rust-gpu" target="_blank" rel="noopener">Rust-GPU/rust-gpu</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-shader-pruzkum-khronos-597b3f5d.jpg" length="29583" type="image/jpeg" />
		</item>
		<item>
			<title>Servo 0.4 vykreslí správně víc webů, označit v nich text ale zatím nejde</title>
			<link>https://tech-blog.chatujme.cz/clanek/servo-0-4-vykreslovani-webu-a-vyber-textu</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/servo-0-4-vykreslovani-webu-a-vyber-textu</guid>
			<pubDate>Thu, 09 Jul 2026 19:33:22 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Prohlížečové jádro Servo vydalo verzi 0.4.0. Obsahuje 558 commitů, které do repozitáře přišly v červnu, a s nimi lepší vykreslení lichess.org, Zulipu nebo Speedtestu. Viditelný výběr textu se v něm teprve začal psát a v knihovně pro RSA zůstává známá časovací zranitelnost.]]></description>
			<content:encoded><![CDATA[<p>Projekt <a href="https://servo.org/" rel="noopener">Servo</a> vydal 31.&nbsp;července verzi 0.4.0. Na GitHubu k&nbsp;ní patří <a href="https://github.com/servo/servo/releases/tag/0.4.0" rel="noopener">značka 0.4.0</a>, devět sestavených balíčků pro Linux, Windows, macOS, Android a&nbsp;OpenHarmony a&nbsp;archiv se zdrojovými kódy. Číslo verze ale nepopisuje červenec: podle <a href="https://servo.org/blog/2026/07/31/june-in-servo/" rel="noopener">měsíčního zápisu</a> jsou v&nbsp;0.4.0 změny, které do repozitáře přišly v&nbsp;červnu.</p>

<p>Červen byl na commity rekordní, 558 proti 534 v&nbsp;dubnu a&nbsp;391 v&nbsp;květnu. Projekt u&nbsp;toho poznamenává, že za měsíc pročítá přes čtyřnásobek toho, co v&nbsp;září 2023, kdy s&nbsp;měsíčními zápisy začínal. Kvůli tomu spustil robota, kterému autor štítkem řekne, že jde o&nbsp;zajímavou změnu, a&nbsp;on mu pak položí otázky, které se z&nbsp;kódu nevyčtou: koho se úprava týká, jestli je vidět a&nbsp;jestli se musí zapnout přepínačem.</p>

<h2>Weby, které se vykreslí líp</h2>

<p>Nejvíc je na vydání vidět práce na skutečných stránkách. Podle projektu se výrazně zlepšilo rozvržení na šachovém serveru lichess.org a&nbsp;jinak psaná podpora proměnných fontů (<a href="https://github.com/servo/servo/pull/45768" rel="noopener">#45768</a>) udělala čitelnějšími další weby, jmenovitě Zulip a&nbsp;Speedtest. Google Photos a&nbsp;australský Cash Converters fungovaly už dřív a&nbsp;fungují dál. Mapy Google a&nbsp;OpenStreetMap se vykreslí dobře, jenže ovládání v&nbsp;nich vázne.</p>

<p>S&nbsp;tím souvisí dotazy na média, tedy pravidla, kterými stránka pozná, na čem se zobrazuje. Servo jich přidalo hned několik naráz: rozměrové <code>device-width</code>, <code>device-height</code>, <code>height</code> a&nbsp;<code>aspect-ratio</code> včetně variant <code>min-</code> a&nbsp;<code>max-</code>, k&nbsp;tomu <code>orientation</code>, <code>pointer</code>, <code>any-pointer</code>, <code>hover</code> a&nbsp;<code>any-hover</code>. Web, který podle nich přepíná rozvržení nebo velikost ovládacích prvků, se jimi ve Servu do té doby řídit nemohl.</p>

<figure><img src="/uploads/foto-m2-servo-wikipedie-8717e249.png" alt="Stránka anglické Wikipedie o Servu vykreslená v prohlížeči servoshell"><figcaption>Servoshell zobrazuje stránku anglické Wikipedie o&nbsp;Servu; místo části obrázků a&nbsp;ikon jsou černé obdélníky. Snímek je z&nbsp;prosince 2024, tedy z&nbsp;podstatně starší verze. Foto: Harry Bond, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Z&nbsp;nových rozhraní DOM přibyl <code>SharedWorker</code>, tedy vlákno na pozadí sdílené více kartami téhož webu, dále vlastní registry pro uživatelské HTML prvky a&nbsp;zachytávání ukazatele přes <code>setPointerCapture()</code>. Demonstrační prohlížeč servoshell mezitím dostal přetahování souborů myší, vodorovně posuvnou lištu karet a&nbsp;na Androidu nově vyžaduje verzi 13 a&nbsp;novější.</p>

<h2>Označit text ve stránce se teprve začalo psát</h2>

<p>Ve stejném zápisu stojí věta, která o&nbsp;zralosti Serva řekne víc než seznam funkcí: projekt <em>začal</em> pracovat na viditelném a&nbsp;interaktivním výběru textu (<a href="https://github.com/servo/servo/pull/46107" rel="noopener">#46107</a>) a&nbsp;sám ho označuje za jednu z&nbsp;nejdéle očekávaných funkcí jakéhokoli prohlížeče. Ve verzi 0.4.0 tedy text ve stránce myší neoznačíte.</p>

<p>Za přepínačem zůstává i&nbsp;přístupnost, tedy zpřístupnění obsahu odečítačům obrazovky: kód existuje, spouští se ale volbou <code>--pref accessibility_enabled</code>. Totéž platí pro WebGPU, pro webové animace a&nbsp;pro obecnější podobu funkce <code>attr()</code> v&nbsp;CSS. V&nbsp;servoshellu se to všechno zapíná najednou v&nbsp;experimentálním režimu.</p>

<h2>Opravy z&nbsp;Firefoxu ESR a&nbsp;jedna díra, která zůstává</h2>

<p>JavaScript ve Servu obstarává SpiderMonkey, tedy motor Firefoxu. Verze 0.4.0 ho posunula ze 140.10.1 na 140.11.0 a&nbsp;pak na 140.12.0. První skok zavírá čtyři chyby z&nbsp;oznámení <a href="https://www.mozilla.org/en-US/security/advisories/mfsa2026-48/" rel="noopener">MFSA 2026-48</a> k&nbsp;Firefoxu ESR 140.11: <a href="https://www.cve.org/CVERecord?id=CVE-2026-8388" rel="noopener">CVE-2026-8388</a>, <a href="https://www.cve.org/CVERecord?id=CVE-2026-8391" rel="noopener">CVE-2026-8391</a>, <a href="https://www.cve.org/CVERecord?id=CVE-2026-8974" rel="noopener">CVE-2026-8974</a> a&nbsp;<a href="https://www.cve.org/CVERecord?id=CVE-2026-8975" rel="noopener">CVE-2026-8975</a>. Mozilla to oznámení vydala 19.&nbsp;května, do vydání Serva se ty opravy dostaly na konci července. U&nbsp;druhého skoku, k&nbsp;němuž patří <a href="https://www.mozilla.org/en-US/security/advisories/mfsa2026-58/" rel="noopener">MFSA 2026-58</a> ze 16.&nbsp;června, projekt píše, že zatím neví, které z&nbsp;tamních chyb se ho týkají.</p>

<p>Vlastní chybu Servo opravilo ve výpisu adresářů na <code>file:///</code>. Jméno souboru, ve kterém byl řetězec <code>&lt;/script&gt;</code>, se dalo použít k&nbsp;podstrčení cizího HTML.</p>

<p>Jedna zranitelnost naopak zůstává otevřená a&nbsp;projekt na ni upozorňuje sám. Operace RSA v&nbsp;rozhraní SubtleCrypto sice nově počítají modulární mocninu v&nbsp;konstantním čase, jenže použitá knihovna <code>rsa</code> je pořád zranitelná útokem Marvin: z&nbsp;rozdílů v&nbsp;době výpočtu, měřitelných po síti, jde odvodit soukromý klíč. Záznam <a href="https://rustsec.org/advisories/RUSTSEC-2023-0071.html" rel="noopener">RUSTSEC-2023-0071</a> ho vede od listopadu 2023, hodnotí ho známkou 5,9 a&nbsp;v&nbsp;kolonce s&nbsp;opravenou verzí má „no patched versions“.</p>

<h2>Rust nemá stabilní ABI, dopisuje se rozhraní v&nbsp;céčku</h2>

<p>Servo se má dát vložit do cizí aplikace a&nbsp;právě tady naráží na jazyk, ve kterém je psané. Rust nemá stabilní binární rozhraní, takže dosud šlo Servo vestavět jen tak, že si ho vývojář přeložil ze zdrojových kódů. Projekt proto navrhuje obalové rozhraní v&nbsp;céčku (<a href="https://github.com/servo/servo/pull/44984" rel="noopener">#44984</a>), přes které půjde použít předem sestavenou sdílenou knihovnu. Nad ním má později vzniknout obal v&nbsp;Rustu, aby zůstalo pohodlí jazyka a&nbsp;odpadl překlad celého jádra.</p>

<p>Šetřit se zkoušelo i&nbsp;uvnitř. Servo umí v&nbsp;částech kódu dokázat, že tam nemůže proběhnout úklid paměti v&nbsp;JavaScriptu, a&nbsp;v&nbsp;takovém úseku pak nemusí objekty zamykat proti uklizení. Na rozvržení stránky a&nbsp;na kolekci <code>HTMLCollection</code> to podle projektu ubralo přes jedno procento režie.</p>

<p>Servo vzniklo v&nbsp;roce 2012 v&nbsp;Mozilla Research, správu nad ním v&nbsp;roce 2020 převzala Linux Foundation a&nbsp;od roku 2023 sídlí v&nbsp;Linux Foundation Europe. Svůj <a href="https://servo.org/about/" rel="noopener">krátkodobý cíl</a> si projekt formuluje střízlivě: dostat se z&nbsp;výzkumného projektu k&nbsp;použitelnému jádru se stabilním rozhraním. Na to má trvalé dary ve výši 7&nbsp;681 dolarů měsíčně, tedy o&nbsp;0,2&nbsp;% víc než v&nbsp;květnu, a&nbsp;platí z&nbsp;nich servery na překlad a&nbsp;měření i&nbsp;část práce správců. Náš názor: proti rozpočtům, se kterými se dělá Chrome a&nbsp;Firefox, je to číslo, které o&nbsp;tempu vypovídá líp než rekord v&nbsp;počtu commitů.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-servo-wikipedie-8717e249.png" length="161401" type="image/png" />
		</item>
		<item>
			<title>TypeScript 7 vyšel s překladačem v Go, sestavení zrychlilo osm až dvanáctkrát</title>
			<link>https://tech-blog.chatujme.cz/clanek/typescript-7-prekladac-v-go</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/typescript-7-prekladac-v-go</guid>
			<pubDate>Wed, 08 Jul 2026 21:29:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Microsoft vydal 8. července 2026 verzi TypeScript 7.0. Nepřidává žádnou vlastnost jazyka – mění se to, čím se překládá: dosavadní překladač psaný v JavaScriptu nahradil program v jazyce Go. Sestavení zdrojových kódů Visual Studio Code kleslo ze 125,7 na 10,6 sekundy. Cenou za to je chybějící programové rozhraní, bez kterého se neobejdou nástroje kolem Vue, Svelte nebo Angularu.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-06-go-gopher-fc374e7c.jpg" alt="Kreslený sysel, maskot programovacího jazyka Go, drží tužku a francouzský klíč"><figcaption>Gopher, maskot jazyka Go. Právě do Go Microsoft překladač TypeScriptu přenesl. Foto: Renee French, Wikimedia Commons (CC BY 3.0)</figcaption></figure>

<p>Microsoft vydal <strong>8.&nbsp;července 2026</strong> verzi <strong>TypeScript 7.0</strong>. Nepřináší žádnou novou vlastnost jazyka. Mění se to, čím se překládá: dosavadní překladač napsaný v&nbsp;JavaScriptu nahradil program napsaný v&nbsp;jazyce <strong>Go</strong>, který běží jako nativní kód a&nbsp;umí zapřáhnout víc jader naráz.</p>

<p>Výsledek stojí za pozornost. Úplné sestavení zdrojových kódů editoru Visual Studio Code trvalo na šestce <strong>125,7 sekundy</strong>, na sedmičce <strong>10,6 sekundy</strong>. To je bezmála dvanáctinásobné zrychlení téže práce nad týmž kódem.</p>

<h2>Přenesení, ne přepsání</h2>

<p>TypeScript je nadstavba nad JavaScriptem, která do něj doplňuje typy. Typ je slib, jakou hodnotu smí proměnná nést; překladač ten slib zkontroluje a&nbsp;typy pak z&nbsp;kódu zase odstraní, protože prohlížeč o&nbsp;nich nic neví. Právě ta kontrola je na velkých projektech drahá – a&nbsp;právě ona zrychlila.</p>

<p>Podstatné je, jak se to udělalo. Nešlo o&nbsp;nový návrh překladače, ale o&nbsp;<strong>přenesení stávajícího kódu do jiného jazyka</strong> se zachováním jeho struktury i&nbsp;postupů. Microsoft to shrnuje tak, že si nová základna drží původní logiku a&nbsp;členění, aby zůstala slučitelná se starou. Prakticky to znamená, že sedmička kontroluje typy stejně jako šestka; kdyby je kontrolovala jinak, byla by to chyba, ne vlastnost.</p>

<p>Vnitřní název projektu byl <em>Corsa</em>, původní základna se v&nbsp;repozitáři označuje jako <em>Strada</em>. Zdrojový kód portu vznikal veřejně v&nbsp;repozitáři <em>microsoft/typescript-go</em> pod licencí Apache 2.0.</p>

<h2>Naměřená čísla</h2>

<p>Microsoft zveřejnil srovnání na třech otevřených projektech. Uvádí čas úplného sestavení a&nbsp;spotřebu paměti při něm:</p>

<table>
<tr><th>Projekt</th><th>TypeScript 6</th><th>TypeScript 7</th><th>Zrychlení</th></tr>
<tr><td>Visual Studio Code</td><td>125,7&nbsp;s</td><td>10,6&nbsp;s</td><td>11,9×</td></tr>
<tr><td>Sentry</td><td>139,8&nbsp;s</td><td>15,7&nbsp;s</td><td>8,9×</td></tr>
<tr><td>Bluesky</td><td>24,3&nbsp;s</td><td>2,8&nbsp;s</td><td>8,7×</td></tr>
</table>

<p>Spotřeba paměti klesla mírněji, o&nbsp;šest až šestadvacet procent: u&nbsp;Visual Studio Code z&nbsp;5,2 na 4,2 gigabajtu, u&nbsp;Bluesky z&nbsp;1,8 na 1,3 gigabajtu. Zrychlila také práce v&nbsp;editoru – dobu, než se ve zdrojových kódech Visual Studio Code objeví hlášení o&nbsp;chybách, uvádí Microsoft nově pod 1,3 sekundy proti dřívějším 17,5 sekundy.</p>

<p>Zrychlení má dva zdroje. Prvním je nativní kód, který nemusí procházet běhovým prostředím JavaScriptu. Druhým je souběžnost: sedmička umí rozdělit kontrolu typů mezi několik pracovních vláken se sdílenou pamětí. Zapíná se volbou <code>--checkers</code>, výchozí počet je čtyři; volba <code>--builders</code> obdobně paralelizuje projekty propojené odkazy. Obě jsou zatím označené jako pokusné a&nbsp;existuje i&nbsp;<code>--singleThreaded</code> pro případ, že by souběžnost překážela při hledání chyb. Režim sledování změn <code>--watch</code> stojí na sledovači souborů z&nbsp;projektu Parcel, přeneseném rovněž do Go.</p>

<h2>Firmy hlásí kratší čekání</h2>

<p>K&nbsp;oznámení Microsoft připojil zkušenosti několika firem, které sedmičku zkoušely před vydáním. Ve Slacku podle nich klesl čas kontroly typů v&nbsp;průběžné integraci ze 7,5 minuty na 1,25 minuty a&nbsp;doba strávená ve frontě na sloučení změn se zkrátila o&nbsp;čtyřicet procent. V&nbsp;Canvě se čekání na vypsání chyb zkrátilo z&nbsp;58 na 4,8 sekundy. Vlastní tým Microsoftu pro zpravodajské služby uvádí úsporu 400 hodin měsíčně stráveného čekáním na sestavení. Jsou to údaje od zúčastněných stran, ne nezávislé měření – řádově ale odpovídají číslům z&nbsp;tabulky výše.</p>

<h2>Chybí rozhraní, na kterém stojí celá jedna vrstva nástrojů</h2>

<p>Tady přichází druhá polovina zprávy. TypeScript 7.0 <strong>nemá veřejné programové rozhraní</strong>. Dosud si mohl cizí program překladač zavolat jako knihovnu, předat mu soubor a&nbsp;ptát se ho na typy. Na tom stojí nástroje, které kontrolují typy v&nbsp;souborech, jež nejsou obyčejný TypeScript – tedy v&nbsp;šablonách.</p>

<p>Postižené jsou <strong>Vue, Svelte, Astro, MDX a&nbsp;šablony Angularu</strong>. Nástroje jako Volar, které typovou kontrolu v&nbsp;šablonách zajišťují, se na sedmičku zatím napojit nedokážou. Kdo takový projekt vyvíjí, zůstává na TypeScriptu 6.0, a&nbsp;to i&nbsp;kdyby ho zrychlení lákalo sebevíc.</p>

<p>Microsoft slibuje nové rozhraní ve verzi <strong>7.1</strong>. Datum k&nbsp;němu neuvádí. Repozitář portu u&nbsp;položky „veřejné rozhraní“ stále vede stav, že hotové není.</p>

<p>Verze <strong>6.0</strong>, která vyšla <strong>23.&nbsp;března 2026</strong>, tak dostává jasnou úlohu: je to poslední vydání postavené na dosavadní javascriptové základně a&nbsp;zároveň most k&nbsp;sedmičce. Obě verze jde nainstalovat vedle sebe.</p>

<h2>Co ze sedmičky vypadlo</h2>

<p>Přenesení do Go posloužilo i&nbsp;k&nbsp;úklidu. Tvrdou chybou nově končí překlad do <em>ES5</em>, tedy do starší podoby JavaScriptu, dále modulové systémy AMD, UMD a&nbsp;SystemJS, původní způsob dohledávání modulů a&nbsp;volba <code>baseUrl</code>, kterou nahrazuje výslovné vypsání cest.</p>

<p>Změnily se také výchozí hodnoty nastavení. Sedmička je má takto:</p>

<pre><code class="language-json">{
  "compilerOptions": {
    "strict": true,
    "module": "esnext",
    "rootDir": "./",
    "types": []
  }
}</code></pre>

<p>Nejzrádnější je poslední řádek. Dřív si překladač typové definice ze závislostí dohledával sám; nově je nutné je vypsat, například <code>"types": ["node", "jest"]</code>. Kdo to neudělá, dostane hlášení o&nbsp;neznámých globálních jménech. Přibylo i&nbsp;seřazení typů, které je nově stálé a&nbsp;nedá se vypnout.</p>

<p>Zúžila se podpora JavaScriptu psaného s&nbsp;komentáři <em>JSDoc</em>. Podle soupisu úmyslných rozdílů v&nbsp;repozitáři portu už neprojdou funkce používané místo tříd, značky <code>@enum</code> a&nbsp;<code>@class</code> ve stylu knihovny Closure ani některé starší zápisy. Sjednotila se naopak práce se znaky mimo základní rovinu Unicode: řetězcová šablona nad textem „😀abc“ se nově dělí na „😀“ a „abc“, ne uprostřed dvojice kódových jednotek.</p>

<h2>Kdy má smysl přejít</h2>

<p>Hodnocení: přechod dává smysl hned tam, kde je projekt psaný v&nbsp;čistém TypeScriptu a&nbsp;kde kontrola typů zdržuje. Čísla jsou dost velká na to, aby se vyplatilo projít změněná nastavení a&nbsp;odstraněné volby.</p>

<p>Kdo staví na Vue, Svelte, Astru nebo šablonách Angularu, nemá zatím na výběr. A&nbsp;protože Microsoft k&nbsp;rozhraní žádný termín neuvedl, není jasné, jak dlouho ten stav potrvá – což je u&nbsp;vydání označeného jako stabilní nezvyklé. Ohlášené rozhraní není vydané rozhraní.</p>

<p>Zdroje: <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/" rel="noopener">oznámení TypeScriptu 7.0</a> a&nbsp;<a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/" rel="noopener">oznámení verze 6.0</a> na vývojářském blogu Microsoftu, <a href="https://github.com/microsoft/typescript-go" rel="noopener">repozitář portu</a> včetně <a href="https://github.com/microsoft/typescript-go/blob/main/CHANGES.md" rel="noopener">soupisu úmyslných rozdílů proti šestce</a> a&nbsp;nezávislý rozbor <a href="https://morello.dev/blog/typescript-7-is-here" rel="noopener">Dennise Morella</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-06-go-gopher-fc374e7c.jpg" length="116156" type="image/jpeg" />
		</item>
		<item>
			<title>FreeBSD ohlásil základní systém bez GPL, v jádře kód zůstal</title>
			<link>https://tech-blog.chatujme.cz/clanek/freebsd-gpl-jadro</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/freebsd-gpl-jadro</guid>
			<pubDate>Tue, 16 Jun 2026 21:11:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Projekt FreeBSD odstranil 7. července ze zdrojového stromu poslední program pod licencí GPL a na wiki k tomu připsal „Mission accomplished“. Po třech týdnech větu zúžil na uživatelskou část systému. V jádře dál leží hlavičkové soubory převzaté z Linuxu.]]></description>
			<content:encoded><![CDATA[<p>FreeBSD roky vyměňuje součástky svého základního systému za takové, které nejsou pod licencí GPL. Sedmého července 2026 došla řada na poslední z&nbsp;nich. Vývojář Dag-Erling Smørgrav zapsal do hlavní větve dva <a href="https://github.com/freebsd/freebsd-src/commit/af202a5052b6" rel="noopener">commity</a>, které z&nbsp;repozitáře smazaly program dialog a&nbsp;s&nbsp;ním celý <a href="https://github.com/freebsd/freebsd-src/commit/134a4c78d070" rel="noopener">podstrom gnu</a>. Dohromady z&nbsp;něj ubylo přes 95 tisíc řádků.</p>
<figure><img src="/uploads/foto-m2-freebsd-gpl-stanek-9c0320ea.jpg" alt="Stánek projektu FreeBSD s tričky, letáky a monitorem"><figcaption>Stánek projektu FreeBSD na setkání Libre Software Meeting v&nbsp;roce 2010. Foto: Antoine Turmel, Wikimedia Commons (CC BY-SA 2.0)</figcaption></figure>
<p>Dialog je nástroj, který v&nbsp;textovém terminálu kreslí nabídky, formuláře a&nbsp;potvrzovací okna. Instalátor FreeBSD ho takhle používal léta, než dostal vlastní náhradu bsddialog. Zpráva u&nbsp;commitu to shrnuje bez okolků: jde o&nbsp;poslední kus softwaru pod GPL v&nbsp;základním systému, instalátor přešel na bsddialog před čtyřmi lety a&nbsp;poslední program, který dialog ještě volal, je vypnutý přes dva roky.</p>
<h2>Věta, která stála nad tabulkou s&nbsp;otevřenými položkami</h2>
<p>Projekt vede o&nbsp;téhle práci veřejný přehled na stránce <a href="https://wiki.freebsd.org/GPLinBase" rel="noopener">GPLinBase</a>. Po červencovém commitu na ni přibylo prohlášení, které nenechává prostor pro výklad: „FreeBSD is free from ANY GPL code in its Base System. Mission accomplished!“ Tedy že FreeBSD je ve svém základním systému prostý jakéhokoli kódu pod GPL.</p>
<p>Jenže o&nbsp;kus níž na téže stránce je tabulka nedodělků a&nbsp;v&nbsp;<a href="https://web.archive.org/web/20260717152241/https://wiki.freebsd.org/GPLinBase" rel="noopener">archivním snímku ze 17.&nbsp;července</a> v&nbsp;ní jsou dvě položky ve stavu Open, tedy otevřené. Obě mají v&nbsp;názvu slovo kernel: gcov, tedy měření pokrytí kódu testy, a&nbsp;<a href="https://man.freebsd.org/cgi/man.cgi?query=bwn&amp;sektion=4" rel="noopener">bwn</a>, ovladač bezdrátových karet Broadcom.</p>
<p>Server Phoronix si toho 29.&nbsp;července všiml a&nbsp;napsal, že stránka byla mezitím upravena – nově má říkat, že bez GPL je uživatelská část základního systému, ne celý základ.</p>
<h2>Co v&nbsp;jádře opravdu zůstalo</h2>
<p>Nález se dá ověřit přímo v&nbsp;repozitáři. Soubor <a href="https://github.com/freebsd/freebsd-src/blob/main/sys/dts/include/dt-bindings/soc/qcom%2Ctcsr.h" rel="noopener">sys/dts/include/dt-bindings/soc/qcom,tcsr.h</a> má hned na prvním řádku značku <code>SPDX-License-Identifier: GPL-2.0</code> a&nbsp;pod ní copyright nadace Linux Foundation z&nbsp;let 2015 až 2018. Je to hlavičkový soubor převzatý z&nbsp;jádra Linuxu; definuje číselné hodnoty pro registry v&nbsp;čipech Qualcommu.</p>
<p>Druhý příklad je z&nbsp;popisu hardwaru: <a href="https://github.com/freebsd/freebsd-src/blob/main/sys/contrib/device-tree/src/arc/axs103.dts" rel="noopener">axs103.dts</a> nese značku <code>GPL-2.0-only</code> a&nbsp;copyright firmy Synopsys. Device tree je datový popis, ze kterého jádro pozná, jaké součástky na desce jsou a&nbsp;na jakých adresách. Podle Phoronixu je většina ostatních nálezů GPL v&nbsp;jádře dvojlicencovaná, tedy použitelná i&nbsp;pod BSD – tyhle dva soubory ale dvojí licenci nemají.</p>
<h2>Proč to projektu vadí</h2>
<p>Rozdíl mezi oběma licencemi je v&nbsp;tom, co žádají po tom, kdo kód použije. GPL je reciproční: odvozené dílo musí vyjít znovu pod GPL. Licence BSD chce jen uvedení původu. Server Hackaday to v&nbsp;<a href="https://hackaday.com/2026/07/28/freebsd-just-removed-the-last-of-its-gpl-licensed-code/" rel="noopener">článku z&nbsp;28.&nbsp;července</a> ilustruje na dvou opačných příkladech: kód z&nbsp;BSD skončil v&nbsp;macOS i&nbsp;v&nbsp;systému herní konzole PlayStation, kdežto GPL donutila firmu Linksys otevřít firmware routerů řady WRT54G, z&nbsp;čehož vyrostl projekt OpenWrt.</p>
<p>Pro projekt, který chce mít celý strom pod jednou permisivní licencí, je jediný soubor pod GPL stejná překážka jako sto souborů. Podle nás je to důvod, proč se tak pečlivě váží formulace.</p>
<h2>Poprvé to v&nbsp;hlavní větvi vydrželo dvě hodiny</h2>
<p>Cesta k&nbsp;červencovému commitu nebyla přímá. Obě změny byly do hlavní větve zapsány už 29.&nbsp;června v&nbsp;13:49 a&nbsp;téhož dne v&nbsp;15:53 je týž vývojář vrátil zpět dvojicí revertů. Důvod v&nbsp;jejich zprávách nestojí. Sedmého července přišly znovu, tentokrát s&nbsp;odkazem na recenze <a href="https://reviews.freebsd.org/D55424" rel="noopener">D55424</a> a&nbsp;D55425 v&nbsp;projektovém Phabricatoru. Návrh na odstranění dialogu tam byl založený 21.&nbsp;února a&nbsp;dnes je uzavřený.</p>
<h2>Uživatel to zatím nepozná</h2>
<p>Změna je zatím jen v&nbsp;hlavní vývojové větvi. Poslední produkční vydání je podle <a href="https://www.freebsd.org/releases/" rel="noopener">stránky vydání</a> FreeBSD 15.1 ze 16.&nbsp;června 2026; hlavní verze 15.0 vyšla druhého prosince 2025. Verze 16.0 na seznamu chystaných vydání ještě není a&nbsp;projekt k&nbsp;ní žádné datum nezveřejnil. Phoronix uvádí prosinec 2027, zdroj toho čísla ale neudává.</p>
<p>Prakticky se běžnému uživateli nemění nic. Instalátor vypadá stejně jako předtím, protože bsddialog kreslí tytéž nabídky, a&nbsp;celá věc se týká jen základního systému, ne softwaru, který si uživatel doinstaluje z&nbsp;portů a&nbsp;balíčků. Rozdíl je v&nbsp;tom, co smí projekt o&nbsp;svém stromu tvrdit. Po opravě na wiki to je o&nbsp;jednu větu opatrnější.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-freebsd-gpl-stanek-9c0320ea.jpg" length="152593" type="image/jpeg" />
		</item>
		<item>
			<title>Podpora MySQL Galera Cluster končí 30. září, vývoj nové replikace míří k zákazníkům</title>
			<link>https://tech-blog.chatujme.cz/clanek/galera-mysql-konec-podpory</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/galera-mysql-konec-podpory</guid>
			<pubDate>Thu, 04 Jun 2026 14:11:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[MariaDB plc ukončí 30. září 2026 údržbu a binární vydání MySQL varianty Galery, tedy synchronní replikace, kterou vyvíjelo finské Codership, než ho firma v květnu 2025 koupila. Knihovna zůstává pod licencí GPLv2 a po únorových protestech ji MariaDB nechala i v Community Serveru 12.3, jen jako samostatný balíček. Kdo dnes na MySQL Galera Cluster běží, má do konce září dvě cesty: přejít na MariaDB, nebo na klastr od Percony.]]></description>
			<content:encoded><![CDATA[<p>Galera přidává do MySQL a&nbsp;MariaDB synchronní replikaci mezi několika servery: zápis se aplikaci potvrdí až tehdy, když ho přijmou všechny uzly. Z&nbsp;databáze se tím stane klastr, do kterého se dá psát na kterémkoli stroji, a&nbsp;když jeden vypadne, ostatní jedou dál. Napsalo ji finské Codership a&nbsp;dnes běží ve třech rodinách: v&nbsp;záplatované verzi MySQL od Codershipu, v&nbsp;MariaDB a&nbsp;v&nbsp;klastru od Percony. Ta první za dva měsíce končí.</p>

<figure><img src="/uploads/foto-m2-galera-openworks-25251ff3.jpg" alt="Přednáška v potemnělém sále, na projekci nápis OpenWorks"><figcaption>Přednáška na konferenci OpenWorks, kterou pořádá MariaDB. Foto: Sofia Ek, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<h2>Co skončí a&nbsp;kdy</h2>

<p>Datum oznámil 1.&nbsp;prosince 2025 Max Mether, viceprezident MariaDB pro serverové produkty. Ve firemním blogu stojí doslova: „Support for all current MySQL Galera Cluster versions ends on September 30, 2026.“ Do té doby firma slibuje opravy chyb, nové funkce už jen v&nbsp;MariaDB Galera Cluster. Codership, které Galeru napsalo, MariaDB plc koupila v&nbsp;květnu 2025 a&nbsp;vývojáři přešli k&nbsp;ní.</p>

<h2>Migrace „na místě“ znamená jinou databázi</h2>

<p>Firma nabízí dvě cesty: přes replikaci mezi starým a&nbsp;novým klastrem, nebo takzvanou in-place migraci s&nbsp;téměř nulovou odstávkou. To druhé označení svádí k&nbsp;představě, že se vymění knihovna a&nbsp;jede se dál. MariaDB si ale v&nbsp;témže textu vypisuje, co je nutné udělat předem: MariaDB má jinou strukturu systémových tabulek, datový slovník se podle firmy liší „fundamentally“, tedy zásadně, a&nbsp;uživatelské účty ani jejich práva se nemapují jeden na jednoho, takže je nutné je založit znovu.</p>

<p>Percona, která nabízí konkurenční Percona XtraDB Cluster, na to 22.&nbsp;července navázala vlastním čtením téže dokumentace: „you are not upgrading MySQL Galera Cluster. You are moving to a different database that also happens to use Galera.“ V&nbsp;překladu: nepovyšujete stávající klastr, přecházíte na jinou databázi, která taky používá Galeru. Percona je v&nbsp;téhle věci strana sporu a&nbsp;nabízí vlastní produkt, ale ta věta se opírá o&nbsp;migrační poznámky samotné MariaDB.</p>

<h2>V&nbsp;únoru se rada Foundation od firmy odklonila</h2>

<p>U&nbsp;MariaDB je potřeba rozlišovat dvě organizace: MariaDB plc je firma s&nbsp;produkty a&nbsp;zákazníky, MariaDB Foundation je nezisková organizace, která má držet kontinuitu serveru nezávisle na jakékoli firmě. Zápis ze schůze její správní rady z&nbsp;25.&nbsp;února je veřejný a&nbsp;je z&nbsp;něj vidět, jak se rozhodovalo.</p>

<p>Rohit de Souza, který v&nbsp;radě zastupuje MariaDB plc, tam předložil plán firmy ve třech bodech: ponechat Galeru ve verzi 11.8 LTS do konce její podpory, od Community Serveru 12.3 ji vyřadit a&nbsp;dál ji nabízet jako součást Enterprise. Zdůvodnění podle zápisu bylo, že Galera slouží hlavně velkým provozům, že firma koupila práva ke Galeře místo toho, aby si GPL kód jen forkla, a&nbsp;že vývoj plně platí. Následuje věta, kterou zápis uvádí bez obalu: „Open source does not equate to ‚free for everyone in perpetuity‘.“ Tedy že otevřený zdrojový kód neznamená zdarma pro každého a&nbsp;navěky. K&nbsp;tomu poznámka, že dlouhodobá životnost Foundation závisí na tom, aby se firmě vedlo dobře.</p>

<p>Předseda dal radě na výběr ze tří postojů: úplně se s&nbsp;firmou srovnat, otevřeně se od ní odklonit a&nbsp;koordinovat práci komunity na GPL kódu, nebo rozhodnutí firmy respektovat a&nbsp;jen mírnit dopady na uživatele. Rada zvolila druhou možnost. Rozhodla, že Foundation bude „coordinate and accept community work around Galera GPL code contributions going forward“, tedy koordinovat a&nbsp;přijímat příspěvky komunity ke GPL kódu Galery.</p>

<p>Dva dny po té schůzi, 27.&nbsp;února, firma oznámila, že Community Server 12.3 knihovny Galery obsahovat bude. Formulace je opatrná: „now is not the time for a major change“, teď není čas na velkou změnu. Oznámení jmenovitě děkuje dvěma lidem, Frédéricu Descampsovi a&nbsp;Renému Bonvaniemu; oba v&nbsp;té radě sedí. Že jedno způsobilo druhé, ale netvrdí ani firma, ani zápis.</p>

<h2>Ve 12.3 Galera je, ale musí se doinstalovat</h2>

<p>Verze 12.3.2 vyšla 28.&nbsp;května jako stabilní a&nbsp;její poznámky k&nbsp;vydání ukazují, v&nbsp;jaké podobě Galera v&nbsp;komunitní verzi zůstala. Pro balíčky Deb a&nbsp;RPM vznikl samostatný <code>mariadb-server-galera</code> a&nbsp;kdo klastr provozuje, musí si ho nainstalovat výslovně. Při aktualizaci ze starší verze se závislosti Galery nainstalují, ale neaktualizují, a&nbsp;definice služeb v&nbsp;systemd bez toho balíčku neumí ani bootstrap klastru, ani přenos stavu mezi uzly.</p>

<h2>Kde se kód vyvíjí dnes</h2>

<p>Veřejný repozitář Galery je pořád na místě a&nbsp;pořád pod GPLv2, jen se přestěhoval: adresa <code>codership/galera</code> na GitHubu dnes přesměrovává na <code>mariadb-corporation/galera</code>. Ve větvi 4.x je poslední commit z&nbsp;27.&nbsp;května 2026, verzi 26.4.27 tam někdo povýšil 12.&nbsp;května a&nbsp;otevřených hlášení je 252. Organizace <code>codership</code> na GitHubu už žádný veřejný repozitář nemá a&nbsp;doména galeracluster.com přesměrovává na produktovou stránku MariaDB Enterprise Cluster.</p>

<p>Jinak je to s&nbsp;repozitářem, ve kterém leží záplata pro samotné MySQL. Poslední zápis do <code>mysql-wsrep</code> nese datum 18.&nbsp;srpna 2023 a&nbsp;nejvyšší větev je 5.7. Z&nbsp;veřejného GitHubu se tedy nedá poznat, odkud se berou binárky, jejichž údržbu firma do konce září slibuje.</p>

<h2>Dvě cesty a&nbsp;dva měsíce</h2>

<p>Frédéric Descamps z&nbsp;MariaDB Foundation řekl 30.&nbsp;července The Registeru, že „most of the team that worked on Galera“, tedy většina lidí, kteří na Galeře pracovali, podle něj dělá na řešení pro firemní zákazníky. Otázku i&nbsp;odpověď k&nbsp;tomu připojil sám: „Will that become open source one day? That's not the current direction.“ Že to teď takhle nasměrované není. Co ten tým dělá, neupřesnil. Firemní blog MariaDB z&nbsp;února jmenuje v&nbsp;podnikové nabídce MariaDB Advanced Cluster postavený na protokolu Raft, který je zatím v&nbsp;technickém náhledu.</p>

<p>Vikas Mathur, produktový ředitel MariaDB plc, hájí přechod k&nbsp;MariaDB tím, že inovace v&nbsp;ekosystému MySQL se podle něj zastavila a&nbsp;zákazníci to vědí. Marco Tusa z&nbsp;Percony napsal 30.&nbsp;června, že Codership jako firma skončilo a&nbsp;že Foundation kód udrží tak, jak je, pokud se do vývoje nepustí komunita sama.</p>

<p>Podle nás je v&nbsp;celé věci nejdůležitější ta jedna věta z&nbsp;únorového zápisu o&nbsp;tom, že otevřený kód neznamená zdarma navěky. Popisuje totiž, jak firma o&nbsp;věci uvažuje, bez ohledu na to, jak dopadl jeden konkrétní ústupek v&nbsp;jedné konkrétní verzi. Příští schůze rady Foundation je podle zápisu 9.&nbsp;září 2026, tedy tři týdny před koncem podpory.</p>

<p>Zdroje: oznámení <a href="https://mariadb.com/resources/blog/upgrade-now-announcing-mysql-galera-cluster-in-place-migration-to-mariadb-galera-cluster/" target="_blank" rel="noopener">Upgrade Now: Announcing MySQL Galera Cluster In-Place Migration to MariaDB Galera Cluster</a> a&nbsp;<a href="https://mariadb.com/resources/blog/mariadb-community-server-12-3-will-include-galera-cluster/" target="_blank" rel="noopener">MariaDB Community Server 12.3 Will Include Galera Cluster</a> na blogu MariaDB, <a href="https://mariadb.org/bodminutes/2026-02-25/" target="_blank" rel="noopener">zápis ze schůze správní rady MariaDB Foundation</a> z&nbsp;25.&nbsp;února, <a href="https://mariadb.com/docs/release-notes/community-server/12.3/12.3.2" target="_blank" rel="noopener">poznámky k&nbsp;vydání MariaDB 12.3.2</a>, <a href="https://lefred.be/content/a-friendly-reset-understanding-the-mariadb-foundations-role/" target="_blank" rel="noopener">A Friendly Reset: Understanding the MariaDB Foundation's Role</a> na blogu Frédérica Descampse, <a href="https://www.percona.com/blog/migrate-mysql-galera-cluster-to-percona-xtradb-cluster/" target="_blank" rel="noopener">How to Migrate from MySQL Galera Cluster to Percona XtraDB Cluster</a> na blogu Percony, <a href="https://www.tusacentral.net/joomla/index.php/mysql-blogs" target="_blank" rel="noopener">The Galera Crossroads</a> Marca Tusy, zpráva <a href="https://www.theregister.com/2026/07/30/mariadb-again-faces-questions-over-galeras-open-source-future/5280975" target="_blank" rel="noopener">MariaDB again faces questions over Galera's open source future</a> na The Registeru a&nbsp;<a href="https://github.com/mariadb-corporation/galera" target="_blank" rel="noopener">repozitář galera</a> na GitHubu.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-galera-openworks-25251ff3.jpg" length="84334" type="image/jpeg" />
		</item>
		<item>
			<title>Pád ripgrepu ukazuje na chybu v jádře Linuxu, se kterou model od OpenAI odmítl pomoct</title>
			<link>https://tech-blog.chatujme.cz/clanek/ripgrep-pad-jadro-linuxu</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/ripgrep-pad-jadro-linuxu</guid>
			<pubDate>Thu, 28 May 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Vývojář nahlásil 26. července, že ripgrep sestavený proti knihovně musl občas spadne při hledání v obřím stromu adresářů. O dva dny později zveřejnil analýzu, podle které za pádem stojí souběh ve správě paměti jádra Linuxu: vlákno přestane vidět bajt, který samo o deset instrukcí dřív zapsalo. Potvrzení od vývojářů jádra zatím není.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-ripgrep-jadro-souboj-b9a413c0.jpg" alt="Plyšový tučňák Tux, maskot Linuxu"><figcaption>Tux, maskot Linuxu. Foto: Plodan, Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>

<p>Začalo to jako obyčejná stížnost na padající program. Za dva dny z&nbsp;ní byla analýza, která ukazuje jinam, než kde se hledalo: do správy paměti v&nbsp;jádře Linuxu.</p>

<h2>Padalo jen sestavení proti musl</h2>

<p>Daniel Fox Franke otevřel v&nbsp;neděli 26.&nbsp;července v&nbsp;repozitáři vyhledávacího nástroje ripgrep hlášení číslo 3494. Popsal v&nbsp;něm, že binárka pro cíl <code>x86_64-unknown-linux-musl</code> občas skončí signálem SIGSEGV, když prochází opravdu velký strom adresářů a&nbsp;běží přitom v&nbsp;mnoha vláknech. Pád nastal vždy na stejném místě: v&nbsp;kontrole vnitřní konzistence haldy uvnitř alokátoru mallocng, kam se program dostal přes obyčejné otevření adresáře.</p>

<p>Správce ripgrepu, který na GitHubu vystupuje pod jménem BurntSushi, se zeptal, jestli padají i&nbsp;jiné binárky. Franke odpověděl, že s&nbsp;ničím slinkovaným proti glibc pád vyvolat nedokázal a&nbsp;že stejně padá i&nbsp;starší ripgrep 15.1.0.</p>

<h2>Vlákno přestane vidět, co samo napsalo</h2>

<p>V&nbsp;úterý 28.&nbsp;července přibyl pod hlášením vzkaz, že králičí nora vede hlouběji a&nbsp;že podle Frankeho jde o&nbsp;chybu jádra. Doklady zveřejnil týž den v&nbsp;samostatném repozitáři pod licencí MIT-0.</p>

<p>Jádrem nálezu je pozorování, které na správně fungujícím počítači nemá jak nastat. Vlákno zapíše bajt na stránku paměti, kterou právě dostalo, a&nbsp;zhruba o&nbsp;deset strojových instrukcí později si totéž místo přečte – a&nbsp;najde nulu. Franke to změřil dvěma čteními naráz: to bezprostředně po zápisu hodnotu vidělo správně, to opožděné už ne.</p>

<p>Ten rozdíl je podstatný. Kdyby zápis jen nestihl dojít do paměti, procesor by ho pozdějšímu čtení podstrčil z&nbsp;vlastní fronty zápisů a&nbsp;vidělo by ho obojí. Když ho vidí jen to první, buď hodnotu mezitím přepsal někdo jiný, nebo se pod toutéž adresou vyměnila celá stránka paměti.</p>

<p>Pro druhou možnost mluví pohled do souboru <code>/proc/self/pagemap</code> v&nbsp;okamžiku neshody: stránka je hlášená jako přítomná a&nbsp;zapsaná, ale s&nbsp;číslem fyzického rámce 0. To je nulová stránka, kterou si jádro drží pro čtení z&nbsp;dosud nezapsané paměti.</p>

<h2>Co pád zastaví a&nbsp;co ne</h2>

<p>Tu první možnost, tedy přeteklé pole nebo použití uvolněné paměti, vyloučil Franke čtyřmi variantami knihovny musl. Liší se jen tím, co se se stránkami stane předtím, než do nich alokátor poprvé zapíše.</p>

<ul>
<li><strong>P0</strong> bez úprav: 250 běhů, 4 pády.</li>
<li><strong>P1</strong> se dotkne předem všech stránek skupiny: 304 běhů, ani jeden pád.</li>
<li><strong>CTRL</strong> se dotkne předem jen té jedné stránky, na které k&nbsp;chybě dochází: 305 běhů, ani jeden pád.</li>
<li><strong>FAKEPF</strong> se zdrží stejně dlouho a&nbsp;stejně dlouho drží zámek alokátoru, ale zapisuje jinam: 308 běhů, 3 pády.</li>
</ul>

<p>Podstatná je poslední položka. Kdyby pád způsobovalo zdržení nebo držení zámku, zmizel by i&nbsp;u&nbsp;varianty FAKEPF. Rozhoduje tedy to, jestli se na stránku sáhne dřív, než na ni alokátor poprvé zapíše – a&nbsp;to žádná chyba v&nbsp;programu ani v&nbsp;knihovně nevysvětlí.</p>

<h2>Reprodukce vyšla na jednom stroji z&nbsp;pěti</h2>

<p>Pád se dá vyvolat na povel, ale ne všude. Návod je v&nbsp;repozitáři: vygenerovat strom o&nbsp;zhruba 20 GiB v&nbsp;1&nbsp;841&nbsp;862 souborech a&nbsp;nad ním pořád dokola pouštět <code>rg</code> s&nbsp;dvanácti vlákny. Pád přijde v&nbsp;průměru jednou za jednu až tři minuty; havarující běh trvá kolem 1,6 sekundy, čistý zhruba 7,6 sekundy.</p>

<p>Ze zkoušených pěti počítačů uspěl jen ten původní, Threadripper 9960X s&nbsp;jádrem 7.0.12 z&nbsp;openSUSE Tumbleweed. Threadripper 9970X téže generace s&nbsp;jádrem 6.19.10 pád nevydal, stejně jako EPYC 9575F a&nbsp;Xeon 678X s&nbsp;jádrem 6.8.0 a&nbsp;Ryzen AI MAX+ 395 s&nbsp;jádrem 6.18.35. „Pád sleduje verzi jádra, ne rodinu procesorů,“ uzavírá analýza tuhle část (přeloženo).</p>

<h2>Kam ukazuje srovnání zdrojových kódů</h2>

<p>Vysvětlení, ke kterému Franke došel, je souběh dvou cest v&nbsp;jádře. První je obsloužení výpadku stránky při zápisu do dosud nepoužité paměti; té dnes stačí zámek jedné oblasti a&nbsp;nemusí zamykat celou paměť procesu. Druhá je odmapování paměti voláním <code>munmap</code>, po kterém se všem procesorům rozešle žádost o&nbsp;zneplatnění záznamů v&nbsp;TLB, tedy v&nbsp;tabulce překladů adres uvnitř procesoru.</p>

<p>Zámek jedné oblasti proti odmapování nechrání. Když první cesta zveřejní nový záznam v&nbsp;tabulce stránek a&nbsp;druhá už mezitím touž adresu vyčistila, dorazí zneplatnění až po zveřejnění a&nbsp;smaže překlad, který právě vznikl.</p>

<p>Kde se to zhoršilo, hledal Franke porovnáním větví jádra. Cesta výpadku stránky je mezi verzemi 6.19 a&nbsp;7.0 beze změny; změnil se úklid tabulek stránek při odmapování. Analýza jmenuje tři změny z&nbsp;ledna 2026, které ve verzi 7.0 jsou a&nbsp;v&nbsp;6.19 nejsou: <code>4c640eb4181c</code>, <code>fb4ddf208511</code> a&nbsp;<code>eda8c5e77622</code>. Odpovídá to i&nbsp;rozdělení strojů výše.</p>

<p>Patří k&nbsp;tomu ale výhrada, kterou si Franke napsal sám: je to silná shoda, ne důkaz. Zdrojově nedoložil, že nová cesta opravdu strhne záznam, který výpadek stránky právě zveřejnil, a&nbsp;potvrzení nechává na revizi na straně jádra. Dotčené funkce se navíc od verze 7.0 po současný vývojový strom nezměnily, takže opravené to zatím není.</p>

<h2>Model od OpenAI odmítl s&nbsp;laděním pomoct</h2>

<p>Druhou polovinu příběhu popsal server The Register ve středu 29.&nbsp;července. Franke ladil chybu s&nbsp;pomocí jazykových modelů a&nbsp;u&nbsp;těch uzavřených narazil. Model GPT-5.6 Sol od OpenAI podle něj nespolupracoval, protože ho zastavil bezpečnostní klasifikátor; chybová hlášení ho posílala do firemního programu Enterprise Trusted Access. Modely Anthropicu prý ani nezkoušel, protože čekal totéž.</p>

<p>„Bezpečnostní klasifikátor OpenAI je pěkná otrava, když se snažíte vystopovat segfault,“ řekl Franke serveru The Register (přeloženo). Jinde dodal, že nástroj, který odmítá spolupracovat, je pro něj prostě rozbitý nástroj. Sama chyba se přitom poprvé ozvala v&nbsp;ripgrepu přibaleném k&nbsp;nástroji OpenAI Codex; ta binárka je podle Frankeho bajt po bajtu totožná s&nbsp;oficiálním vydáním 15.2.0.</p>

<p>Analýzu nakonec dotáhly modely s&nbsp;otevřenými váhami od čínských firem. Podle Frankeho přinesl klíčový průlom <a href="/clanek/kimi-k3-vahy-ke-stazeni">Kimi K3 od Moonshot AI</a> a&nbsp;práci dokončil GLM 5.2 od Z’ai. Vyjádření OpenAI ani Anthropicu The Register neuvádí.</p>

<p>Stopy modelů jsou vidět i&nbsp;v&nbsp;dokladech samotných. Skript, který generuje testovací strom, je podle hlášení napsaný jazykovým modelem a&nbsp;jeden z&nbsp;commitů v&nbsp;repozitáři s&nbsp;analýzou se jmenuje „Human edit pass on AI prose“, tedy lidská redakce textu od modelu. Jestli takový kód patří do svobodných projektů, řeší <a href="/clanek/debian-hlasovani-llm">chystané hlasování v&nbsp;Debianu</a>.</p>

<p>Pro běžného uživatele z&nbsp;toho neplyne skoro nic: pád potřebuje binárku slinkovanou proti musl, skoro dva miliony souborů, dvanáct vláken a&nbsp;jednu konkrétní řadu jádra. Hodnota té analýzy je podle nás jinde. Ukazuje, kolik práce stojí dojít od „občas to spadne“ k&nbsp;pojmenování konkrétní části zdrojového kódu, a&nbsp;jak snadno by se u&nbsp;toho člověk zastavil na prvním podezřelém, tedy na alokátoru musl.</p>

<p>Zdroje: <a href="https://github.com/BurntSushi/ripgrep/issues/3494" rel="noopener">hlášení 3494 v&nbsp;repozitáři ripgrepu</a> a&nbsp;<a href="https://github.com/dfoxfranke/ripgrep-3494-analysis" rel="noopener">repozitář s&nbsp;analýzou</a> včetně dat a&nbsp;záplat pro musl, o&nbsp;části s&nbsp;modely psal <a href="https://www.theregister.com/ai-and-ml/2026/07/29/closed-models-refuse-to-help-researcher-swat-linux-bug/5280647" rel="noopener">The Register</a>. Názvy tří jmenovaných změn jsme ověřili v&nbsp;<a href="https://github.com/torvalds/linux/commit/4c640eb4181c" rel="noopener">repozitáři jádra Linuxu</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-ripgrep-jadro-souboj-b9a413c0.jpg" length="77885" type="image/jpeg" />
		</item>
		<item>
			<title>Z Jellyfinu odešli během tří dnů vedoucí projektu a dva dlouholetí členové týmu</title>
			<link>https://tech-blog.chatujme.cz/clanek/jellyfin-odchod-vedeni</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/jellyfin-odchod-vedeni</guid>
			<pubDate>Sun, 24 May 2026 21:23:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Svobodný mediální server Jellyfin přišel mezi 17. a 19. červencem 2026 o tři lidi, kteří u něj byli prakticky od začátku, včetně vedoucího projektu Joshuy Bonifacea. Dva z nich mluví o vyhoření z dobrovolné práce. Nástupce vybere volba podle projektové ústavy odvozené od debianské.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-08-meduza-727b4a35.jpg" alt="Medúza nasvícená modrým světlem v akváriu"><figcaption>Medúza, podle které se projekt jmenuje a&nbsp;kterou má ve znaku. Foto: Eric Hripko, Wikimedia Commons (CC BY 3.0)</figcaption></figure>

<p>Jellyfin je svobodný mediální server. Člověk si ho pustí doma na vlastním stroji, uloží do něj filmy, seriály a&nbsp;hudbu a&nbsp;pak je přehrává na televizi, na mobilu nebo v&nbsp;prohlížeči – bez cizí služby a&nbsp;bez předplatného. Vznikl v&nbsp;roce 2018 odštěpením od uzavřeného Emby a&nbsp;sám sebe popisuje jako obdobu Emby a&nbsp;Plexu. Kód má pod licencí GPL-2.0 a&nbsp;na GitHubu přes 55&nbsp;tisíc hvězd.</p>

<p>Mezi <strong>17.&nbsp;a&nbsp;19.&nbsp;červencem 2026</strong> z&nbsp;něj odešli tři lidé, kteří u&nbsp;něj byli prakticky od začátku.</p>

<h2>Tři odchody ve třech dnech</h2>

<p>Jako první opustil <strong>17.&nbsp;července</strong> organizaci <strong>Andrew Rabert</strong>. Oznámil to v&nbsp;hlášení nazvaném „Přejmenovat aplikaci“ ve svém repozitáři: „Tohle už není oficiální projekt organizace Jellyfin. Potřebuje nový název a&nbsp;značku“ (přeloženo z&nbsp;angličtiny). Desktopový klient, který od prosince 2025 psal znovu od základu, se tak dostal mimo projekt a&nbsp;jmenuje se nově <strong>Jellium Desktop</strong>.</p>

<p>Důvod shrnul jednou větou: „Abych shrnul, proč se to přesunulo: vyhoření z&nbsp;práce uvnitř organizace Jellyfin.“ Přepis původního klienta podle něj začal kvůli letitým potížím – chybějící podpoře HDR a&nbsp;údržbě knihovny Qt. „Způsob, jakým jsem to vyvíjel, podporovala jen hrstka členů organizace, včetně <em>části</em> vedení. Celkové naladění ale bylo <em>velmi negativní</em> a&nbsp;čím dál zatěžující a&nbsp;svazující“ (přeloženo).</p>

<p>O&nbsp;dva dny později, <strong>19.&nbsp;července</strong>, odstoupili vedoucí projektu <strong>Joshua Boniface</strong> a&nbsp;člen jádra týmu <strong>Anthony Lavado</strong>, který se u&nbsp;projektu staral hlavně o&nbsp;komunikaci s&nbsp;komunitou a&nbsp;o&nbsp;administrativu. Lavado podle přetisků odchod vysvětlil tím, že se mu mění život a&nbsp;přednost musí dostat jiné věci; o&nbsp;vyhoření nemluví.</p>

<h2>Co napsal odstupující vedoucí</h2>

<p>Boniface, který stál u&nbsp;odštěpení od Emby a&nbsp;vedl projekt víc než sedm let, k&nbsp;tomu <strong>22.&nbsp;července</strong> zveřejnil delší text na svém blogu. Vysvětluje v&nbsp;něm, že role vedoucího mu nikdy nesedla: „Nemám povahu, která by se hodila na řízení velkého projektu.“ A&nbsp;dodává: „Nejsem dobrý vedoucí lidí“ a&nbsp;„nerad říkám lidem ne“ (vše přeloženo z&nbsp;angličtiny).</p>

<p>Bezprostřední důvod je ale jinde. „Prostě jsem už nedokázal vynakládat úsilí – duševní ani časové –, které ta role vyžadovala,“ píše. Slovo vyhoření podle něj sedí přesně v&nbsp;tomhle smyslu: „Nejsem člověk, který by dokázal dělat věci v&nbsp;rozporu se svou povahou donekonečna.“</p>

<p>Do textu zasahuje i&nbsp;téma, které se v&nbsp;otevřeném softwaru řeší poslední rok skoro všude. „Technologická změna tak zásadní, jako jsou jazykové modely, a&nbsp;jejich místo v&nbsp;tomhle projektu – na to má silný názor skoro každý, uvnitř projektu i&nbsp;mimo něj,“ píše Boniface. Zároveň zdůrazňuje, že spor o&nbsp;ně nebyl jediným ani hlavním důvodem jeho odchodu, jen „další stéblo na hřbetě příslovečného velblouda“.</p>

<p>Za zmínku stojí, co v&nbsp;pramenech <em>není</em>. Několik přetisků uvádí, že Rabertův odchod souvisel s&nbsp;odporem týmu vůči jeho používání nástrojů s&nbsp;umělou inteligencí. V&nbsp;jeho vlastním oznámení ale slova umělá inteligence, jazykový model ani jméno konkrétního nástroje nepadnou ani jednou a&nbsp;žádný z&nbsp;těch přetisků pro to neuvádí zdroj.</p>

<h2>Vlna vygenerovaných příspěvků, o&nbsp;které projekt psal už v&nbsp;květnu</h2>

<p>Že je tým unavený, přitom nebylo tajemství. Ve zprávě o&nbsp;stavu projektu z&nbsp;<strong>24.&nbsp;května 2026</strong> stojí: „Zaplavily nás pull requesty psané umělou inteligencí různé kvality. Tím se ohromně zvýšilo množství práce, které tým má na talíři“ (přeloženo). A&nbsp;o&nbsp;kus dál rovnou: „Zvýšený počet žádostí o&nbsp;podporu spolu s&nbsp;příspěvky kódu od umělé inteligence vedl k&nbsp;vyhoření na různých úrovních vývojového i&nbsp;administrativního týmu.“</p>

<p>Pull request je nabídnutá změna kódu, kterou musí někdo z&nbsp;projektu přečíst a&nbsp;posoudit, než ji přijme. Právě to čtení je ta drahá část a&nbsp;u&nbsp;strojově psaných příspěvků je dražší, protože chybu v&nbsp;nich není vidět na první pohled. Podle vlastních čísel projektu se za dvanáct měsíců od května 2025 do dubna 2026 sloučilo měsíčně mezi 182 a&nbsp;434 pull requesty.</p>

<p>Zpráva zároveň ohlásila <strong>pravidla pro jazykové modely</strong>. Nejsou to zákaz ani volná ruka. Výstup modelu se nesmí použít pro přímou komunikaci – do hlášení, do diskuse pod změnou, na fórum; tam má člověk psát vlastními slovy. Při psaní kódu model použít lze, ale jen tehdy, když přispěvatel změnám rozumí a&nbsp;umí je vlastními slovy vysvětlit, otestovat a&nbsp;sám si je obhájit v&nbsp;připomínkovém řízení. Výjimku mají překlady do angličtiny, pokud je přiložen původní text.</p>

<h2>Nástupce určí hlasování podle ústavy</h2>

<p>Jellyfin má psanou <strong>ústavu</strong> a&nbsp;stojí v&nbsp;ní, že vychází z&nbsp;té debianské. Postup pro tenhle případ tedy existoval dřív, než nastal: po rezignaci vedoucího navrhne vedoucí tým jednoho nebo víc kandidátů a&nbsp;hlasují o&nbsp;nich všichni členové týmu přispěvatelů. Volí se pořadím kandidátů s&nbsp;postupným vyřazováním, dokud někdo nezíská nadpoloviční většinu. Když je kandidát jediný a&nbsp;většinu nedostane, rozhoduje hlas odstupujícího vedoucího.</p>

<p>Ústava také říká, že vedoucí musí být zároveň členem vedoucího týmu a&nbsp;tříčlenné finanční komise, a&nbsp;popisuje Bonifaceovo postavení bez příkras: prvního vedoucího nikdo nevolil, jmenoval se sám jako ten, kdo odštěpení od Emby rozjel.</p>

<p>Sám Boniface tvrdí, že projekt tím neskončí: „titíž lidé, kteří tu práci posledních několik let opravdu dělali, u&nbsp;projektu zůstávají.“ Nové vedení podle něj zachová Jellyfin jako svobodný software bez zpoplatnění.</p>

<h2>Co z&nbsp;toho plyne</h2>

<p>Hodnocení, ne údaj ze zdroje: na Jellyfinu je vidět, jak křehké je uspořádání, kde dobrovolníci obsluhují software s&nbsp;velkou uživatelskou základnou. Boniface sám mluví o&nbsp;dvou až třech vlnách <em>Plexfugees</em>, tedy uprchlíků od Plexu, za poslední tři až čtyři roky. Uživatelů přibývá skokově, lidí, kteří jim odpovídají na hlášení, ne.</p>

<p>Odchod tří lidí najednou zní přitom dramatičtěji, než jak ho popisují sami aktéři. Boniface označuje rozchod za přátelský a&nbsp;o&nbsp;rozkol nad směřováním projektu nešlo ani u&nbsp;Raberta – ten mluví o&nbsp;atmosféře kolem své práce, ne o&nbsp;sporu, kam má Jellyfin jít. Ověřitelné bude až to, co přijde potom: kdo bude zvolen a&nbsp;jestli se rychlost oprav a&nbsp;vydání udrží. To se pozná za pár měsíců, ne z&nbsp;prohlášení.</p>

<p>Zdroje: <a href="https://www.boniface.me/posts/on-my-jellyfin-resignation/" rel="noopener">text Joshuy Bonifacea o&nbsp;jeho rezignaci</a>, <a href="https://github.com/andrewrabert/jellium-desktop/issues/609" rel="noopener">oznámení Andrewa Raberta na GitHubu</a>, <a href="https://jellyfin.org/posts/state-of-the-fin-2026-05-24/" rel="noopener">zpráva o&nbsp;stavu projektu z&nbsp;24.&nbsp;května 2026</a>, <a href="https://jellyfin.org/docs/general/contributing/llm-policies/" rel="noopener">pravidla projektu pro jazykové modely</a> a&nbsp;<a href="https://github.com/jellyfin/jellyfin-meta/blob/master/policies-and-procedures/jellyfin-constitution.md" rel="noopener">ústava projektu</a>. Souhrny přinesly servery <a href="https://linuxiac.com/jellyfin-loses-project-leader-and-core-team-member-in-major-shake-up/" rel="noopener">Linuxiac</a> a&nbsp;<a href="https://itsfoss.com/news/jellyfin-leadership-crisis/" rel="noopener">It's&nbsp;FOSS</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-08-meduza-727b4a35.jpg" length="180201" type="image/jpeg" />
		</item>
		<item>
			<title>Na kontrolu do Debianu čeká 36 balíčků a nejstarší z nich už tři týdny</title>
			<link>https://tech-blog.chatujme.cz/clanek/debian-fronta-new-dfsg-tym</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/debian-fronta-new-dfsg-tym</guid>
			<pubDate>Wed, 20 May 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Než se nový balíček dostane do Debianu, musí někdo ručně ověřit, že jeho licence odpovídají pravidlům svobodného softwaru. Od letošního února má tahle fronta veřejný přehled, do kterého vidí kdokoli – dřív podle jeho autorů takový pohled zvenčí nebyl. Podíval jsem se, co v něm dnes stojí: 36 balíčků čeká na kontrolu, nejstarší z nich 21 dní, a za týden od 22. do 29. července jím prošlo 89 kontrol.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-debian-fronta-dea6f843.jpg" alt="Notebook s vypsaným logem Debianu v ASCII grafice"><figcaption>Logo Debianu vysázené v&nbsp;terminálu skriptem, který k&nbsp;oslavě narozenin distribuce napsal jeden z&nbsp;účastníků. Foto: Aman03062006, Wikimedia Commons (CC0)</figcaption></figure>

<p>Do Debianu se balíček nedostane jen tím, že ho někdo nahraje. Pokud v&nbsp;distribuci ještě nikdy nebyl, spadne do fronty zvané <strong>NEW</strong> a&nbsp;čeká, až ho člověk projde ručně. Nekontroluje se přitom, jestli program funguje – kontroluje se, jestli jeho licence a&nbsp;licence všeho, co si s&nbsp;sebou nese, odpovídají pravidlům svobodného softwaru.</p>

<h2>Kdo to dělá</h2>

<p>Má to na starosti <strong>DFSG, Licensing &amp; New Packages Team</strong>, zkráceně DFSG tým. Jeho jádro tvoří podle wiki Debianu delegáti vedoucího projektu podle §&nbsp;8 ústavy a&nbsp;poslední delegace je z&nbsp;letošního ledna. Úkol týmu zní „projít balíčky ve frontě NEW a&nbsp;potvrdit, že plně odpovídají Debian Free Software Guidelines“ (přeloženo).</p>

<p>Ruční kontrola je podle téhož zdroje potřeba proto, aby nahrané balíčky splnily standardy distribuce a&nbsp;aby dovnitř neprošly „balíčky s&nbsp;právními problémy nebo s&nbsp;hrubými vadami zabalení“ (přeloženo). Naopak za to, že je balíček bez závažných chyb, tým odpovědnost výslovně nemá – to je věc správce balíčku.</p>

<h2>Co se vlastně kontroluje</h2>

<p>Debian Free Software Guidelines jsou deset bodů, které Debian přijal v&nbsp;roce 1997 jako součást své společenské smlouvy; návrh sepsal Bruce Perens a&nbsp;měsíc ho pak v&nbsp;e-mailové konferenci připomínkovali ostatní vývojáři. Vyjmenovávají, co musí licence dovolit, aby software mohl být v&nbsp;distribuci.</p>

<p>První tři body dávají představu o&nbsp;zbytku. Licence nesmí nikomu bránit software prodávat ani rozdávat jako součást většího celku. Program musí mít zdrojový kód a&nbsp;smět se šířit v&nbsp;něm i&nbsp;přeložený. A&nbsp;licence musí dovolit úpravy a&nbsp;odvozená díla, a&nbsp;to za týchž podmínek jako původní software.</p>

<p>Kontrola v&nbsp;NEW se tedy netýká jen licence samotného programu. Balíček s&nbsp;sebou nese i&nbsp;knihovny, obrázky, písma nebo ukázková data a&nbsp;každá taková součást musí projít.</p>

<h2>Co v&nbsp;té frontě je</h2>

<p>Od února má fronta veřejný přehled. Reinhard Tartler ho oznámil <strong>12.&nbsp;února</strong> se slovy, že „poprvé má každý – nejen vývojáři Debianu – přehled o&nbsp;tom, co se ve frontě přesně děje“ (přeloženo). Nešlo podle něj o&nbsp;pouhou vizuální úpravu, ale o „zásadní posun v&nbsp;tom, jak balíčky řadíme a&nbsp;zpracováváme“ (přeloženo).</p>

<p>Přehled je otevřený, takže jsem se do něj podíval. Stav k&nbsp;<strong>29.&nbsp;červenci</strong>:</p>

<ul>
<li>ve frontě čeká <strong>36 balíčků</strong>, z&nbsp;toho 6 přednostně,</li>
<li>nejdéle čeká <code>pjproject</code> – <strong>21&nbsp;dní</strong>,</li>
<li>nejmladší položka byla v&nbsp;tu chvíli ve frontě <strong>dvě hodiny</strong>.</li>
</ul>

<p>Za týden od 22.&nbsp;do 29.&nbsp;července prošlo frontou <strong>89 kontrol</strong> a&nbsp;všechny skončily přijetím. Zamítnutí za ten týden není ani jedno; u&nbsp;některých balíčků je v&nbsp;poznámce připomínka recenzenta, která ale schválení nezabránila.</p>

<p>Sto procent přijatých je číslo, které svádí k&nbsp;závěru, že kontrola je formalita. Z&nbsp;jednoho týdne se to ale tvrdit nedá – stejně dobře to může znamenat, že správci balíčků vědí, co se po nich chce, a&nbsp;problémové věci se řeší dřív, než se do fronty vůbec dostanou.</p>

<h2>Podle čeho se řadí</h2>

<p>Pořadí ve frontě není podle data nahrání. Skládá se ze tří věcí: jak dlouho balíček čeká, jak je podle statistiky PopCon rozšířený, a&nbsp;jestli na něj čekají další hlášené chyby. Tým k&nbsp;tomu uvádí jednoduchý cíl – „snížit frontu“ (přeloženo).</p>

<p>PopCon je dobrovolná statistika, kterou Debian sbírá od uživatelů o&nbsp;tom, co mají nainstalované. Náš názor: balíček, který v&nbsp;distribuci ještě není, se v&nbsp;ní z&nbsp;podstaty objevit nemůže, takže nováček vstupuje do řazení s&nbsp;nulou v&nbsp;jednom ze tří kritérií.</p>

<h2>Proč je to vidět zrovna teď</h2>

<p>Tým shrnul, jak mu první měsíce po osamostatnění vyšly, na letošní konferenci DebConf. Server LWN.net z&nbsp;toho referoval <strong>28.&nbsp;července</strong>, jeho článek je ale přístupný jen předplatitelům, takže obsah té zprávy tady nerozvádím – čísla výše jsou z&nbsp;veřejného přehledu, ne z&nbsp;ní.</p>

<p>Debian tenhle rok řeší i&nbsp;jinou otázku kolem toho, co do distribuce smí: v&nbsp;červenci <a href="/clanek/debian-hlasovani-llm">projednával čtyři návrhy</a>, jak naložit s&nbsp;příspěvky od jazykových modelů. Obě věci mají společné to, že se rozhoduje o&nbsp;původu kódu, ne o&nbsp;jeho funkci.</p>

<p>Zdroje: <a href="https://wiki.debian.org/Teams/DFSG" rel="noopener">wiki Debianu</a>, <a href="https://lwn.net/ml/all/20260212132552.46C7013F903@x1.int.tauware.de/" rel="noopener">oznámení Reinharda Tartlera</a> (12.&nbsp;února 2026) a&nbsp;veřejný <a href="https://dfsg-new-queue.debian.org/dashboard" rel="noopener">přehled fronty NEW</a>, ze kterého jsou čísla k&nbsp;29.&nbsp;červenci 2026.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-debian-fronta-dea6f843.jpg" length="173075" type="image/jpeg" />
		</item>
		<item>
			<title>Návrh, aby Linux uměl vytvořit a otevřít adresář jedním voláním, dělí vývojáře jádra</title>
			<link>https://tech-blog.chatujme.cz/clanek/linux-o-creat-o-directory-adresar</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/linux-o-creat-o-directory-adresar</guid>
			<pubDate>Tue, 07 Apr 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Kdo v Linuxu zakládá adresář a chce mu hned nastavit práva, musí to udělat na dva kroky. V mezeře mezi nimi mu ho může někdo vyměnit. Série záplat Joriho Koolstry chce tu mezeru zavřít tím, že vzkřísí kombinaci příznaků O_CREAT a O_DIRECTORY, kterou jádro tři roky odmítá s chybou. Správce vrstvy VFS je pro, dva vývojáři varují, že program nemá jak poznat, jestli mu novinku jádro nabízí.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-o-creat-o-directory-kartoteka-91065752.jpg" alt="Zásuvky dřevěné knihovní kartotéky s prázdnými štítky"><figcaption>Zásuvky kartotéky ve veřejné knihovně v&nbsp;Nashue. Foto: MarkBuckawicki, Wikimedia Commons (CC0)</figcaption></figure>

<h2>Mezi vytvořením a&nbsp;otevřením je okno</h2>

<p>Volání <code>mkdir()</code> adresář založí, ale nevrátí nic, čím by ho program mohl dál držet. Volání <code>open()</code> a&nbsp;<code>openat()</code> naopak adresář otevřou, jenže jen takový, který už existuje. Kdo tedy zakládá strom adresářů a&nbsp;chce jim nastavit práva, vlastníka, časy nebo rozšířené atributy, musí to udělat na dva kroky: nejdřív vytvořit, pak otevřít podle jména.</p>

<p>V&nbsp;té mezeře je závod. Jori Koolstra to v&nbsp;<a href="https://marc.info/?l=linux-kernel&amp;m=178387900368161&amp;w=2" rel="noopener">popisu klíčové záplaty</a> píše natvrdo: než se program dostane k&nbsp;otevření, může adresář někdo vyměnit za něco jiného. Obejít se to dá jen napůl. Program si smí hned po otevření zavolat <code>fstat()</code> a&nbsp;ověřit, že drží adresář s&nbsp;očekávaným vlastníkem a&nbsp;právy, ale podle Koolstry se to snadno naprogramuje špatně a&nbsp;hlavně to neřekne to podstatné: kdo adresář vytvořil. Adresář založený jiným procesem se stejnými oprávněními je od toho vlastního nerozeznatelný, takže se program nedozví, jestli je jeho a&nbsp;má ho na starost.</p>

<p>Nápad není nový. Stojí v&nbsp;<a href="https://github.com/uapi-group/kernel-features" rel="noopener">seznamu přání skupiny UAPI</a>, který totéž žádá i&nbsp;pro zařízení a&nbsp;pojmenované roury a&nbsp;jako řešení navrhuje samostatné volání <code>mkdirat_fd()</code>.</p>

<h2>Příznak, který tři roky vrací jen chybu</h2>

<p>Koolstra sáhl po jiné cestě: po kombinaci příznaků, která dnes nedělá nic. <code>O_CREAT</code> říká „vytvoř, když to neexistuje“, <code>O_DIRECTORY</code> říká „uspěj jen tehdy, když je to adresář“. Dohromady si protiřečí a&nbsp;jádro se s&nbsp;nimi nikdy nevypořádalo rozumně. Když cesta neexistovala, vytvořilo obyčejný soubor. Když na ní ležel obyčejný soubor, vrátilo <code>ENOTDIR</code>. Když adresář, vrátilo <code>EISDIR</code>.</p>

<p>V&nbsp;roce 2020 to commit Ala Vira, který se dostal do jádra 5.7, změnilo ještě k&nbsp;horšímu: jádro začalo v&nbsp;prvním případě vracet <code>ENOTDIR</code> a&nbsp;soubor přitom stejně vytvořilo. Tři roky si toho nikdo nevšiml, až v&nbsp;roce 2023 na to narazil Pedro Falcato. Christian Brauner tehdy navrhl, ať se místo návratu ke starému chování udělá to, co dělá NetBSD, tedy vracet <code>EINVAL</code> vždycky. Linus Torvalds podle <a href="https://lwn.net/Articles/926782/" rel="noopener">tehdejšího rozboru na LWN.net</a> souhlasil; v&nbsp;překladu řekl: „Myslím, že můžeme docela dobře předpokládat, že to nikdo doopravdy nepoužívá, a&nbsp;klidně to můžeme pořádně vyčistit.“ Falcato u&nbsp;té příležitosti zjistil, že POSIX nezakazuje ani jedno z&nbsp;těch chování a&nbsp;že FreeBSD kombinaci propustí, pokud adresář existuje.</p>

<p>Brauner změnu zapsal v&nbsp;březnu 2023 do <a href="https://github.com/torvalds/linux/commit/43b450632676fb60e9faeddff285d9fac94a4f58" rel="noopener">commitu <code>43b450632676</code></a> a&nbsp;do jeho zprávy dal i&nbsp;důvod: kromě úklidu staré chyby to podle něj otevírá možnost dát té kombinaci příznaků v&nbsp;budoucnu něco intuitivnějšího. Právě o&nbsp;tu možnost teď jde.</p>

<h2>Co série mění</h2>

<p>Nová sémantika je prostá. <code>O_CREAT|O_DIRECTORY</code> provede mkdir a&nbsp;otevře, co vzniklo, a&nbsp;vrátí přitom deskriptor, který adresář drží. <a href="https://marc.info/?l=linux-kernel&amp;m=178387884668067&amp;w=2" rel="noopener">Poslední verze série</a> z&nbsp;12.&nbsp;července má deset záplat, mění 224 řádků v&nbsp;souboru <code>fs/namei.c</code> a&nbsp;přidává test o&nbsp;201 řádcích. Jedna ze záplat musela předsunout kontrolu, jestli smí program adresář otevřít pro zápis: u&nbsp;obyčejných souborů se dělá až na konci, tady by to znamenalo adresář vytvořit a&nbsp;hned potom volání odmítnout.</p>

<p>Ne všude to bude fungovat. Souborové systémy s&nbsp;vlastním atomickým otevíráním, tedy 9p, Ceph, FUSE, GFS2, NFS, klient SMB a&nbsp;vboxsf, by na to podle Koolstry potřebovaly rozšířit své protokoly. Zatím u&nbsp;nich jádro bit <code>O_CREAT</code> odstraní: existující adresář se otevře, ale u&nbsp;toho, který se měl vytvořit, přijde <code>ENOENT</code>.</p>

<p>Druhé omezení se týká adresářů s&nbsp;příznakem sticky, tedy třeba <code>/tmp</code>, kde smí soubor smazat jen jeho vlastník. Vlastní přepínač pro adresáře série nezavádí a&nbsp;dosavadní pojistka pro obyčejné soubory na ně nedosáhne: podle Koolstry by to zaskočilo správce, kteří s&nbsp;takovou možností nepočítají.</p>

<h2>Spor je o&nbsp;to, jak program pozná, že to jádro umí</h2>

<p>Spor se nevede o&nbsp;samotnou vlastnost, ale o&nbsp;to, že se zapíná kombinací příznaků, a&nbsp;ne novým voláním. Christoph Hellwig namítá, že jádro neznámé a&nbsp;neověřené kombinace příznaků u&nbsp;<code>open()</code> odjakživa ignoruje, takže se jim nesmí potichu dát význam, pokud to není zpětně slučitelné. Na Braunerovu obranu, že se dosud nic nerozbilo, <a href="https://marc.info/?l=linux-kernel&amp;m=178472675929577&amp;w=2" rel="noopener">odpověděl</a> v&nbsp;překladu takto: „Samozřejmě se dosud nic nerozbilo, protože to nikdo nepoužíval. Jakmile tomu dáme význam, začne se to používat a&nbsp;rozbije se to.“</p>

<p>Falcato ten problém rozepsal na příklady. Program by se musel vyrovnat se čtyřmi chováními téže kombinace. Zjistit podle verze jádra, na kterém běží, které z&nbsp;nich platí, přitom nemusí být možné: podniková jádra si vlastnosti backportují na přání, jak se stalo u&nbsp;atomických zápisů v&nbsp;souborovém systému XFS, které vyšly v&nbsp;jádře 6.16 a&nbsp;v&nbsp;SUSE Linux Enterprise Serveru i&nbsp;v&nbsp;Oracle UEK 8 se objevily už v&nbsp;6.12. K&nbsp;tomu se přidává filtr seccomp, který může neznámé volání odmítnout hláškou o&nbsp;tom, že volání vůbec není.</p>

<p>Brauner, správce vrstvy VFS, to <a href="https://marc.info/?l=linux-kernel&amp;m=178472489827696&amp;w=2" rel="noopener">označil za konstrukci</a>, která neobstojí: oprava, po které kombinace vrací tvrdou chybu, je podle něj v&nbsp;dlouhodobě podporovaných jádrech roky a&nbsp;nepřišlo na ni ani jedno hlášení o&nbsp;regresi. Připomněl i&nbsp;tři případy, kdy jádro už jednou obsazený příznak přeznačilo: <code>CLONE_STOPPED</code> na <code>CLONE_NEWCGROUP</code>, <code>CLONE_PID</code> na <code>CLONE_PIDFD</code> a&nbsp;<code>O_TMPFILE</code> na kombinaci <code>__O_TMPFILE|O_DIRECTORY</code>. Sám přitom rozlišuje, co je a&nbsp;co není v&nbsp;pořádku: dát význam kombinaci, která se dřív ignorovala, se podle něj nemá, kdežto použít znovu kombinaci, která byla odmítána, ano.</p>

<p>Do jednoho bodu se ti dva nesejdou. Brauner tvrdí, že se změna z&nbsp;roku 2023 dostala do všech dlouhodobě podporovaných jader, Falcato uvádí, že vyšla v&nbsp;jádře 6.4, dostala se zpětně do 6.1, ale ne do 6.2 a&nbsp;6.3 a&nbsp;ne do 5.15 ani 5.10. Kdo z&nbsp;nich má pravdu, se z&nbsp;diskuse nedozvíme; ani jeden pro své tvrzení odkaz neuvedl.</p>

<p>Koolstra odpovídá, že komu záleží na starých jádrech, ať si po vytvoření ověří, že opravdu drží adresář, nebo ať si prostě vyžádá rozumnou minimální verzi jádra. NeilBrown navrhl kompromis, který by hádání zrušil: přidat do volání <code>openat2()</code> příznak ve smyslu „selži, pokud tuhle kombinaci výslovně neumíš“. Ptá se, proč to <a href="https://marc.info/?l=linux-kernel&amp;m=178475781651965&amp;w=2" rel="noopener">neudělat rovnou</a>, když by se tím psaní bezpečné aplikace i&nbsp;výběr jádra staly snadné.</p>

<p>Koolstra proti tomu má dvě námitky, ani jednu ale nepovažuje za zabijáka nápadu. Volání <code>openat2()</code> podle něj blokovala a&nbsp;možná dosud blokuje řada profilů seccomp, mimo jiné v&nbsp;systemd, takže by se k&nbsp;tomu zjišťování nedostaly zrovna ty velké aplikace, jejichž potřeby změny v&nbsp;rozhraní jádra obvykle pohánějí. A&nbsp;za druhé je to podle něj věc slohu: <code>openat2()</code> má otevírat soubory, ne zjišťovat vlastnosti jádra. Sám nadhodil samostatné volání <code>has_feature(2)</code>, kterému by se předalo číslo volání a&nbsp;popis vlastnosti.</p>

<h2>Kde to stojí</h2>

<p>Sloučeno není nic. Brauner 24.&nbsp;července <a href="https://marc.info/?l=linux-kernel&amp;m=178488576690077&amp;w=2" rel="noopener">požádal o&nbsp;novou verzi</a> s&nbsp;podporou v&nbsp;<code>openat()</code> i&nbsp;<code>openat2()</code>; Koolstra odpověděl, že to už v&nbsp;posílání z&nbsp;12.&nbsp;července je a&nbsp;jen zapomněl sérii označit jako čtvrtou. Dřív téhož měsíce ho Brauner požádal, ať ze série vyndá nesouvisející opravy, protože zásah do auditu by si vyžádal zapojení lidí od auditu a&nbsp;slučování by zdržel. To se stalo: nová verze má deset záplat místo čtrnácti a&nbsp;audit řeší zvlášť.</p>

<p>Kdo o&nbsp;tom rozhodne, napsal Koolstra sám: je to na Christianovi.</p>

<p>Zdroje: <a href="https://marc.info/?l=linux-kernel&amp;m=178387884668067&amp;w=2" rel="noopener">série záplat</a> a&nbsp;<a href="https://marc.info/?l=linux-kernel&amp;m=178489826800694&amp;w=2" rel="noopener">diskuse k&nbsp;ní</a> v&nbsp;archivu konference linux-kernel na marc.info, <a href="https://lwn.net/Articles/926782/" rel="noopener">rozbor LWN.net z&nbsp;27.&nbsp;března 2023</a>, <a href="https://github.com/torvalds/linux/commit/43b450632676fb60e9faeddff285d9fac94a4f58" rel="noopener">commit 43b450632676</a> v&nbsp;repozitáři jádra a&nbsp;<a href="https://github.com/uapi-group/kernel-features" rel="noopener">seznam přání skupiny UAPI</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-o-creat-o-directory-kartoteka-91065752.jpg" length="202345" type="image/jpeg" />
		</item>
		<item>
			<title>Debian se chystá hlasovat, jestli do něj smí kód od jazykových modelů</title>
			<link>https://tech-blog.chatujme.cz/clanek/debian-hlasovani-llm</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/debian-hlasovani-llm</guid>
			<pubDate>Wed, 01 Apr 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Debian od 24. července projednává obecné usnesení o tom, co dělat s příspěvky vytvořenými pomocí jazykových modelů. Na stole jsou čtyři návrhy: od úplného zákazu, který by šel až do Společenské smlouvy, po povolení s šesti podmínkami. Rozprava potrvá nejméně dva týdny, teprve pak se hlasuje. Zatím tedy neplatí ani jedno.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-17-debconf-4e457fd2.jpg" alt="Společná fotografie účastníků vývojářské konference DebConf15 v Heidelbergu"><figcaption>O&nbsp;pravidlech Debianu rozhodují jeho vývojáři hlasováním. Na snímku společné foto z&nbsp;konference DebConf15 v&nbsp;Heidelbergu. Foto: Aigars Mahinovs, Wikimedia Commons (CC BY 4.0)</figcaption></figure>

<p>Většina projektů řeší otázku kódu od jazykových modelů potichu, někde v&nbsp;diskusi pod žádostí o&nbsp;začlenění. Debian ji řeší způsobem, který má zapsaný ve své ústavě: obecným usnesením, o&nbsp;kterém hlasují všichni vývojáři projektu.</p>

<p>Rozprava začala <strong>24.&nbsp;července</strong> a&nbsp;potrvá nejméně dva týdny. Teprve po ní přijde hlasování. <strong>Do té doby neplatí žádné z&nbsp;níže popsaných pravidel</strong> – Debian příspěvky od jazykových modelů ani nezakázal, ani formálně nepovolil.</p>

<h2>Čtyři návrhy na stole</h2>

<p><strong>Návrh A</strong>&nbsp;předložil Matthias Geiger a&nbsp;je z&nbsp;celé čtveřice nejtvrdší. Zakazuje příspěvky napsané s&nbsp;pomocí jazykových modelů a&nbsp;chce to zapsat přímo do <em>Společenské smlouvy</em>, tedy do jednoho ze zakládajících dokumentů projektu. Navrhovaná věta v&nbsp;překladu zní: „Nedovolíme přímé příspěvky do Debianu napsané s&nbsp;použitím nebo pomocí velkých jazykových modelů.“</p>

<p><strong>Návrh B</strong> pochází od Lucase Nussbauma, bývalého vedoucího projektu, a&nbsp;jde opačným směrem. Příspěvky povoluje, ale za šesti podmínkami: licence nástroje nesmí kolidovat s&nbsp;tím, jak Debian software šíří a&nbsp;upravuje; u&nbsp;převzatých částí musí být ověřený původ; odpovědnost nese vždy člověk, který příspěvek podává; podstatný podíl strojově vytvořeného textu se musí přiznat; hromadné úpravy je nutné předem probrat; a&nbsp;citlivá data se nesmí posílat neprověřeným poskytovatelům.</p>

<p><strong>Návrh C</strong> od Iana Jacksona je kompromis. Vývojáře žádá, aby se jazykovým modelům vyhýbali, kde to jde, ale připouští, že úplný zákaz je v&nbsp;praxi nevymahatelný. Zajímavé je, co z&nbsp;něj vyjímá a&nbsp;co naopak přitvrzuje: <strong>zprávy určené lidem</strong> – hlášení chyb, e-maily, zápisky – má psát člověk. Zároveň výslovně říká, že kdo nepíše anglicky rodile, může používat překladače bez pocitu viny.</p>

<p><strong>Návrh D</strong> předložil Pierre-Elliott Bécue a&nbsp;povoluje pomoc modelů jen pro práci na samotném Debianu, ne pro projekty, ze kterých Debian software přebírá. Kdo příspěvek podává, musí mu rozumět natolik, aby ho obhájil, podepisuje ho svým jménem a&nbsp;pomoc modelu má vyznačit v&nbsp;popisu změny.</p>

<h2>Čeho by se zákaz týkal</h2>

<p>U&nbsp;nejtvrdšího návrhu je rozsah širší, než by čekal ten, kdo si pod „příspěvkem“ představí jen kód. Týkal by se zdrojových balíků, softwaru vyvíjeného přímo Debianem (jmenovitě nástroje <code>lintian</code>), oficiálních webových stránek, dokumentace, překladů i&nbsp;projektové komunikace.</p>

<p>Naopak by se <strong>netýkal</strong> tří věcí: projektů, ze kterých Debian software přebírá a&nbsp;které si modely používají po svém; balíků, které samy o&nbsp;sobě slouží k&nbsp;práci s&nbsp;umělou inteligencí; a&nbsp;záplat a&nbsp;bezpečnostních oprav přebíraných od autorů původního softwaru. Bez téhle výjimky by pravidlo v&nbsp;praxi znamenalo vyhodit velkou část distribuce.</p>

<h2>Proč to někdo chce zakázat</h2>

<p>Argumenty proti se opakují ve všech podobných diskusích: model si věci vymýšlí a&nbsp;chyba se pak hledá hůř než u&nbsp;člověka; když kód píše stroj, přestává mu rozumět komunita, která ho má za deset let udržovat; provoz modelů stojí energii; trénovalo se na cizí práci bez svolení; a&nbsp;u&nbsp;výsledku není jasné, jak je to s&nbsp;licencí.</p>

<p>Argumenty pro jsou stručnější a&nbsp;praktičtější: nástroje vývojářům reálně pomáhají, zákaz stejně nejde vymáhat a&nbsp;v&nbsp;okamžiku, kdy je používá skoro každý, se projekt zakazováním jen připraví o&nbsp;přispěvatele.</p>

<p>Ta nevymahatelnost je jádro sporu. Nikdo neumí spolehlivě poznat, jestli patch napsal člověk, nebo model. Návrhy B až D proto místo zákazu staví na <strong>přiznání</strong>: kdo si nechal pomoct, má to uvést u&nbsp;příspěvku.</p>

<h2>Jak se v&nbsp;Debianu rozhoduje</h2>

<p>Obecné usnesení je nástroj, kterým Debian řeší věci, na kterých se neshodne běžnou cestou. Návrhy potřebují podporu dalších vývojářů; u&nbsp;těchto čtyř se pohybuje mezi šesti a&nbsp;devíti podporovateli.</p>

<p>Hlasuje se preferenčně: vývojář nevybírá jednu možnost, ale seřadí je podle toho, které dává přednost. Ve výsledku tak může zvítězit i&nbsp;návrh, který nebyl ničí první volbou, zato ho většina snese.</p>

<p>Jeden rozdíl mezi návrhy je čistě formální, přesto důležitý. Návrh A&nbsp;mění Společenskou smlouvu, tedy zakládající dokument. Návrh B se tomu vědomě vyhýbá a&nbsp;opírá se o&nbsp;článek 4.1 (5) ústavy – pravidlo by pak šlo upravit bez dalšího hlasování celého projektu.</p>

<h2>Proč na tom záleží i&nbsp;mimo Debian</h2>

<p>Debian je základ, ze kterého vychází Ubuntu a&nbsp;přes něj i&nbsp;většina desktopových distribucí Linuxu. Jeho pravidla mají dosah, ale hlavně se tu poprvé rozhoduje veřejně a&nbsp;hlasováním o&nbsp;něčem, co jinde vzniká jako neformální zvyk.</p>

<p>Ať dopadne hlasování jakkoliv, výsledek bude dost podrobný na to, aby se dal převzít. A&nbsp;pokud vyhraje některý z&nbsp;prostředních návrhů, vznikne v&nbsp;otevřeném softwaru něco, co zatím chybí: běžný způsob, jak u&nbsp;příspěvku vyznačit, že u&nbsp;něj asistoval stroj.</p>

<p>Zdroje: <a href="https://www.debian.org/vote/2026/vote_002" rel="noopener">oficiální stránka usnesení na debian.org</a>, <a href="https://www.heise.de/en/news/Debian-project-faces-fundamental-decision-on-LLM-use-11378317.html" rel="noopener">zpravodajství heise online</a> a&nbsp;<a href="https://linuxiac.com/debian-developers-debate-ban-on-ai-assisted-contributions/" rel="noopener">Linuxiac</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-17-debconf-4e457fd2.jpg" length="407766" type="image/jpeg" />
		</item>
		<item>
			<title>Glibc 2.44 nastaví ladicí přepínače všem programům, formát souboru ale nezaručuje</title>
			<link>https://tech-blog.chatujme.cz/clanek/glibc-244-tunables-conf</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/glibc-244-tunables-conf</guid>
			<pubDate>Fri, 20 Mar 2026 10:11:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Knihovna GNU C vyšla ve verzi 2.44. Novinkou je soubor /etc/tunables.conf, kterým správce nastaví ladicí přepínače knihovny všem programům naráz; ldconfig je uloží do mezipaměti ld.so.cache. Oznámení k vydání zároveň říká, že formát toho souboru ani jeho umístění nejsou stabilní rozhraní.]]></description>
			<content:encoded><![CDATA[<p>Knihovna GNU C je základ, na kterém v&nbsp;linuxových systémech stojí skoro každý program: obstarává práci se soubory, sítí, pamětí i&nbsp;překlad jmen na adresy. Verzi 2.44 <a href="https://sourceware.org/pipermail/libc-alpha/2026-July/179159.html" rel="noopener">oznámil</a> 25.&nbsp;července v&nbsp;konferenci libc-alpha správce vydání Andreas K. Hüttel. V&nbsp;seznamu přispěvatelů je 111 jmen a&nbsp;vydání zavírá 67 hlášených chyb.</p>
<figure><img src="/uploads/m2-fsf-kancelar-1c47b1dc.jpg" alt="Červené logo Free Software Foundation na světle zelené stěně kanceláře"><figcaption>Logo Free Software Foundation na stěně její bostonské kanceláře. Knihovna glibc patří do projektu GNU, který nadace zaštiťuje. Foto: Mike Linksvayer, Wikimedia Commons (CC0)</figcaption></figure>
<p>Největší novinka je soubor <code>/etc/tunables.conf</code>. Nastavují se v&nbsp;něm takzvané tunables, tedy přepínače, kterými jde měnit chování knihovny za běhu – od prahů, kdy alokátor paměti vrací paměť zpátky systému, po využití bezpečnostních rozšíření procesoru. Dosud se zadávaly proměnnou prostředí <code>GLIBC_TUNABLES</code>, a&nbsp;tím pádem zvlášť pro každé spuštění.</p>
<h2>Hodnoty projdou přes ldconfig do mezipaměti</h2>
<p>Podle <a href="https://github.com/bminor/glibc/commit/fae194043a099d45c044c883467c934153ecc51f" rel="noopener">dokumentace, kterou k funkci napsal DJ Delorie</a>, má soubor jeden přepínač na řádek:</p>
<pre><code class="language-ini">glibc.malloc.trim_threshold=128
glibc.malloc.check=3</code></pre>
<p>Samotný soubor ale programy nečtou. Přeloží ho <code>ldconfig</code>, tedy nástroj, kterým se po instalaci knihoven obnovuje jejich rejstřík, a&nbsp;uloží hodnoty jako rozšíření do mezipaměti <code>/etc/ld.so.cache</code>. Odtud si je vezme každý program při startu. Na už běžící programy změna nemá vliv. Soubor umí i&nbsp;vkládat další soubory příkazem <code>include</code>, stejnou syntaxí jako dávno zavedený <code>ld.so.conf</code>.</p>
<h2>Předpona rozhoduje, kdo smí hodnotu přepsat</h2>
<p>Hodnoty ze systémového souboru fungují jako výchozí: přebíjejí to, co má program zabudované, ale samy je pořád možné přebít proměnnou prostředí. Právě tohle jde u&nbsp;jednotlivého řádku vypnout. Předpona <code>nonoverridable</code> nebo znak <code>-</code> zablokuje změnu z&nbsp;prostředí a&nbsp;dá přednost systémovému nastavení, <code>overridable</code> či <code>+</code> je výchozí chování.</p>
<p>Druhá sada předpon vybírá podle toho, jestli proces běží s&nbsp;vyššími právy – dokumentace mluví o&nbsp;příznaku AT_SECURE, tedy o&nbsp;programech se setuid, setgid nebo se zvýšenými oprávněními. <code>onlysecure</code> (<code>@</code>) se použije jen na ně, <code>nonsecure</code> (<code>$</code>) jen na ostatní, <code>anysecure</code> (<code>*</code>) na všechny.</p>
<h2>Filtr umí zacílit na jediný program</h2>
<p>K&nbsp;tomu přibyly filtry. Řádek ve tvaru <code>[proc:vzor]</code> omezí následující přepínače na konkrétní program, ať už podle celé cesty, nebo jen podle jména souboru. Jméno procesu si knihovna přečte z&nbsp;<code>/proc/self/exe</code>, a&nbsp;když to nejde, z&nbsp;<code>argv[0]</code> – to ale ne u&nbsp;procesů s&nbsp;vyššími právy. Ukázka z&nbsp;dokumentace zapíná v&nbsp;celém systému ochranu návratových adres stínovým zásobníkem a&nbsp;jednomu programu, který na ní padá, ji vypíná:</p>
<pre><code class="language-ini">-glibc.cpu.x86_shstk=1
[proc:/usr/bin/program_that_crashes_with_shstk]
+glibc.cpu.x86_shstk=0</code></pre>
<p>Filtr platí do dalšího filtru, do řádku s&nbsp;prázdnými hranatými závorkami, nebo do konce souboru. Kód pochází z&nbsp;dílny Red Hatu; dokumentaci zapsal Delorie 26.&nbsp;června a&nbsp;revidoval ji Arjun Shankar.</p>
<h2>Rozhraní, které se smí změnit</h2>
<p>Oznámení k&nbsp;vydání k&nbsp;novince připojuje větu, která stojí za přečtení dřív, než si ji správce zapíše do konfigurace serverů: konkrétní přepínače, formát souboru <code>/etc/tunables.conf</code> ani cesta k&nbsp;němu nepatří mezi stabilní rozhraní knihovny a&nbsp;mezi vydáními se můžou změnit. Kdo si na tenhle soubor postaví nasazení, počítá s&nbsp;tím, že mu příští verze glibc může sáhnout na syntaxi.</p>
<p>Server <a href="https://www.phoronix.com/news/Glibc-System-Tunables" rel="noopener">Phoronix při zápisu funkce do repozitáře</a> upozornil ještě na jednu věc: díky předponě, která zakáže přepsání z&nbsp;prostředí, jde nově některé přepínače uzamknout.</p>
<h2>Tři bezpečnostní upozornění, čtyři čísla CVE</h2>
<p>Bezpečnostní oddíl oznámení jmenuje tři upozornění. Dvě se týkají funkcí <code>gethostbyaddr</code> a&nbsp;<code>gethostbyaddr_r</code>: podle popisu u&nbsp;<a href="https://www.cve.org/CVERecord?id=CVE-2026-4437" rel="noopener">CVE-2026-4437</a> mohla podvržená odpověď DNS serveru vést k&nbsp;tomu, že program vzal část odpovědi, která odpovědí není, jako platnou; <a href="https://www.cve.org/CVERecord?id=CVE-2026-4438" rel="noopener">CVE-2026-4438</a> pak popisuje vracení neplatných jmen. Obojí se týká verzí 2.34 až 2.43. Třetí, <a href="https://www.cve.org/CVERecord?id=CVE-2026-4046" rel="noopener">CVE-2026-4046</a>, je pád funkce <code>iconv</code> na kontrolním výrazu při převodu ze znakových sad IBM1390 a&nbsp;IBM1399; záznam u&nbsp;něj rovnou uvádí, že se to dá obejít odstraněním obou sad ze systému, kde je nikdo nepotřebuje.</p>
<p>V&nbsp;seznamu opravených chyb je ale ještě čtvrté číslo. U&nbsp;hlášení 34069 stojí <a href="https://www.cve.org/CVERecord?id=CVE-2026-6238" rel="noopener">CVE-2026-6238</a>, přečtení paměti za koncem vyrovnávací paměti ve funkci <code>ns_sprintrrf</code> u&nbsp;poškozených záznamů DNS. Samostatné upozornění k&nbsp;němu v&nbsp;oznámení není. Záznam v&nbsp;databázi jmenuje tři zavržené funkce určené jen k&nbsp;ladění aplikací; překladač jmen je při své práci nevolá a&nbsp;doporučení nepoužívat je platí od verze 2.34.</p>
<h2>Přibyl LoongArch32, zmizela 31bitová podpora s390</h2>
<p>Ze zbytku vydání vyčnívá jedna věta pro programátory v&nbsp;jazyce C. Dokumentace nově říká, že příští verze glibc můžou zmírnit požadavky na zarovnání u&nbsp;malých alokací: <code>malloc(1)</code> tak jednou může vrátit ukazatel na lichou adresu, protože objekt velikosti 1 žádné větší zarovnání nepotřebuje. Kdo se spoléhá na to, že z&nbsp;alokátoru chodí adresy zarovnané jako dosud, má varování.</p>
<p>Matematické funkce <code>cosh</code>, <code>sinh</code> a&nbsp;<code>tanh</code> jsou převzaté z&nbsp;projektu CORE-MATH, který se zabývá správně zaokrouhlenými implementacemi. Makro <code>assert</code> zvládne kvůli chystanému C++26 víc argumentů oddělených čárkami. Na procesorech RISC-V dostalo vektorové varianty třináct funkcí pro práci s&nbsp;řetězci a&nbsp;pamětí. Na AArch64 přibyly vektorizované varianty dalších matematických funkcí a&nbsp;u&nbsp;rozšíření Guarded Control Stack se po jeho zapnutí operace s&nbsp;ním zamknou, aby program nemohl ochranu za běhu vypnout.</p>
<p>Podpora architektur se rozešla na dvě strany: přibyl 32bitový LoongArch, naopak 31bitová varianta s390 skončila. Zrušená je i&nbsp;volba překladu <code>--enable-memory-tagging</code> a&nbsp;s&nbsp;ní i&nbsp;příslušná funkce pro AArch64. Přibylo jazykové prostředí <code>hrx_BR</code> pro hunsrik, kterým se mluví v&nbsp;Brazílii.</p>
<p>Do systémů se novinky dostanou s&nbsp;dalším kolem vydání distribucí; Phoronix jmenuje <a href="https://www.phoronix.com/news/GNU-C-Library-glibc-2.44" rel="noopener">Ubuntu 26.10 a Fedoru 45</a>. Hlavní vývojová větev se mezitím otevřela pro verzi 2.45; zpráva o&nbsp;tom leží v&nbsp;archivu konference hned nad oznámením o&nbsp;vydání.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/m2-fsf-kancelar-1c47b1dc.jpg" length="78218" type="image/jpeg" />
		</item>
		<item>
			<title>Codeberg zakázal projekty psané převážně modely, sám je hledat nebude</title>
			<link>https://tech-blog.chatujme.cz/clanek/codeberg-zakaz-ai-projektu</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/codeberg-zakaz-ai-projektu</guid>
			<pubDate>Tue, 17 Mar 2026 19:23:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Členské shromáždění spolku, který provozuje úložiště kódu Codeberg, schválilo 22. července poměrem 358 ku 144 zákaz projektů složených z větší části ze strojově psaného kódu. Druhý návrh zavazuje provozovatele, že na hostovaném kódu modely učit nebude. Vyhledávat závadné repozitáře přitom nikdo nehodlá.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-12-fosdem-janson-18c03103.jpg" alt="Zaplněný sál Janson při zahájení konference FOSDEM"><figcaption>Zahájení konference svobodného softwaru FOSDEM v&nbsp;sále Janson. Ilustrační snímek. Foto: Enrique Ayesta Perojo, Wikimedia Commons (CC BY-SA 3.0)</figcaption></figure>

<p>Na Codebergu, veřejném úložišti zdrojového kódu, za kterým stojí spolek Codeberg&nbsp;e.&nbsp;V., skončilo 22.&nbsp;července hlasování členského shromáždění. Prošly dva návrhy a&nbsp;oba se týkají jazykových modelů. První zavazuje provozovatele, druhý omezuje uživatele. Spolek o&nbsp;výsledku informoval na svém blogu následující den.</p>

<p>Ten první bod prošel snadno. Zní, že forge Codeberg ani jeho přidružené služby nepoužívají a&nbsp;nebudou používat kód ani data projektů a&nbsp;uživatelů k&nbsp;učení nástrojů typu velkých jazykových modelů. Zákaz cizího vytěžování hostovaného kódu to není, jde o&nbsp;závazek samotného provozovatele.</p>

<p>Druhý návrh byl sporný. Do výčtu zakázaného obsahu v&nbsp;§&nbsp;2 podmínek užití přibyla věta: „Nesmíte sdílet projekty, které se z&nbsp;větší části skládají z&nbsp;kódu napsaného nástroji ‚generativní AI‘ (včetně služeb jako Claude nebo OpenAI&nbsp;Codex).“ Citace je přeložená z&nbsp;anglického originálu. Pro hlasovalo 358&nbsp;členů, proti 144, zdrželo se 14. Podle spolku se zúčastnila zhruba polovina aktivních členů.</p>

<h2>Rozhoduje slovo „z&nbsp;větší části“</h2>

<p>Zákaz není plošný a&nbsp;spolek to sám zdůrazňuje. Nedotčené mají zůstat „projekty, které mají činnou komunitu, jež se o&nbsp;software stará a&nbsp;udržuje ho“. Vítané naopak nebudou „projekty psané a&nbsp;udržované s&nbsp;výrazným využitím modelů“. Kde je mezi tím hranice, podmínky neříkají.</p>

<h2>Proč to spolek dělá</h2>

<p>Blogový zápis, pod kterým jsou podepsáni Bastian Greshake Tzovaras, Otto Richter a&nbsp;William Zijl, uvádí dva důvody. Prvním jsou peníze. „Typ disku, který jsme před pár lety pořídili za 700&nbsp;eur, dnes stojí 3&nbsp;700&nbsp;eur – a&nbsp;často není skladem,“ stojí v&nbsp;textu. K&nbsp;tomu spolek dodává, že ve Frankfurtu už datová centra spotřebují 40&nbsp;% místní elektřiny a&nbsp;poptávka roste. Stavba počítačových sálů pro modely tedy podle něj zdražuje provoz i&nbsp;těm, kdo je nepoužívají.</p>

<p>Druhým důvodem je licence. U&nbsp;copyleftových projektů podle zápisu modely vedou k&nbsp;„praní licencí“, tedy stavu, kdy je copyleftový kód zbaven požadavku na reciprocitu tím, že se „vygeneruje“ z&nbsp;trénovacích dat. Copyleft je licenční ujednání, které nutí každého, kdo kód převezme, šířit i&nbsp;svou úpravu pod stejnými podmínkami; když projde modelem, tahle vazba se ztratí.</p>

<p>Zátěž správců není téma jen Codebergu. Z&nbsp;<a href="/clanek/jellyfin-odchod-vedeni">Jellyfinu letos v&nbsp;červenci odešli vedoucí projektu i&nbsp;dva dlouholetí členové týmu</a>.</p>

<h2>Co bude s&nbsp;existujícími repozitáři</h2>

<p>Nic hromadného. „Náš moderátorský tým nezačne tím, že by sestavil vyčerpávající seznam dotčených repozitářů k&nbsp;odstranění,“ píše spolek. Automatické prohledávání obsahu se dělat nebude, případy se mají řešit jeden po druhém, až se objeví.</p>

<p>Je to zároveň nejslabší místo celé změny. Pravidlo mluví o&nbsp;podílu strojově psaného kódu, jenže ten podíl nikdo neumí změřit a&nbsp;provozovatel se o&nbsp;to ani nepokouší.</p>

<h2>Kryptoměny týmž shromážděním</h2>

<p>Vedle obou hlasování o&nbsp;modelech prošla ještě jedna změna podmínek. Návrh přihlášený 2.&nbsp;července uživatelem Gusted byl sloučen 22.&nbsp;července a&nbsp;doplňuje mezi zakázaný obsah takový, který poškozuje pověst Codebergu; jako příklad podmínky jmenují projekty spojené s&nbsp;kryptoměnami. Diskuse pod návrhem se točila právě kolem toho, co všechno se pod takový příklad vejde; vlákno nakonec někdo uzavřel kvůli návalu příspěvků zvenčí.</p>

<h2>Kritika míří na nevymahatelnost</h2>

<p>Autor frameworku Flask Armin Ronacher shrnul svou výhradu 24.&nbsp;července v&nbsp;zápisu nazvaném <em>Codeberg Divides</em>. Právo spolku takové pravidlo přijmout nezpochybňuje, vadí mu jeho tvar: čára je podle něj otevřená výkladu přesně tam, kde by měla být vymahatelná. Dodává, že u&nbsp;řady svých vlastních nedávných projektů by sám nedokázal spolehlivě určit podíl autorství. Podle jeho názoru měl Codeberg buď zakázat modely úplně, nebo mířit konkrétně na samočinně zakládaný spam a&nbsp;na spotřebu zdrojů.</p>

<p>Codeberg tedy nevyřešil, jak strojově psaný projekt poznat, a&nbsp;podle vlastních slov se o&nbsp;to nechystá pokoušet. Změnil něco jiného: kdo takový repozitář nahraje, nemá se napříště o&nbsp;co opřít, protože podmínky ho už nekryjí. Zbytek zůstává na ohlášení od lidí.</p>

<p>Zdroje: <a href="https://blog.codeberg.org/protecting-our-floss-commons-from-llms.html" rel="noopener">zápis na blogu Codebergu</a>, <a href="https://codeberg.org/Codeberg/org/src/branch/main/TermsOfUse.md" rel="noopener">platné znění podmínek užití</a>, <a href="https://www.theregister.com/ai-and-ml/2026/07/23/codeberg-gives-vibe-coded-projects-the-toss-promotes-human-floss/5277717" rel="noopener">The Register</a> a&nbsp;<a href="https://lucumr.pocoo.org/2026/7/24/codeberg-divides/" rel="noopener">zápis Armina Ronachera</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-12-fosdem-janson-18c03103.jpg" length="238533" type="image/jpeg" />
		</item>
		<item>
			<title>NVIDIA vydala první CUDA pro Windows na Armu, ovladač prozradil chystaný čip</title>
			<link>https://tech-blog.chatujme.cz/clanek/cuda-windows-on-arm-rtx-spark</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/cuda-windows-on-arm-rtx-spark</guid>
			<pubDate>Tue, 03 Mar 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Počítače</category>
			<category>Programování</category>
			<description><![CDATA[NVIDIA zveřejnila 16. července vývojářskou verzi CUDA Toolkitu 13.4 s první oficiální podporou Windows na architektuře Arm64. Součástí balíku je ovladač 616.00, z jehož instalačního souboru se dá vyčíst, že chystaný čip RTX Spark N1X přijde nejméně ve dvou variantách – se 6 144 a s 5 120 jádry grafiky.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-16-nvidia-sidlo-30c365b0.jpg" alt="Sídlo společnosti NVIDIA v Santa Claře v Kalifornii"><figcaption>Sídlo NVIDIE na San Tomas Expressway v&nbsp;Santa Claře. Foto: Coolcaesar at English Wikipedia, Wikimedia Commons (CC BY-SA 3.0)</figcaption></figure>

<p>Grafické čipy NVIDIE se na Windows s&nbsp;procesorem Arm doteď obešly bez oficiální podpory. Kdo chtěl na takovém stroji spustit cokoli postavené na CUDA – tedy na rozhraní, kterým NVIDIA pouští výpočty na grafické kartě – měl smůlu. Šestnáctého července to firma změnila: na svém vývojářském fóru vydala <a href="https://forums.developer.nvidia.com/t/rtx-spark-developer-preview/377106" rel="noopener">CUDA Toolkit 13.4 jako Developer Preview</a> a&nbsp;spolu s&nbsp;ním ovladač pro Windows 11 na Arm64.</p>

<h2>Co je v&nbsp;balíku</h2>

<p>Preview má tři části: vývojářský ovladač pro chystanou platformu RTX Spark, samotný toolkit ve verzi 13.4 a&nbsp;dokumentaci. Instalační soubor ovladače se jmenuje <code>616.00_DeveloperPreview_win11_arm64_International.exe</code>. Vedle něj NVIDIA nabízí i&nbsp;verzi pro x64, aby šlo programy pro Arm křížově překládat na běžném počítači.</p>

<p>Podstatné je, že k&nbsp;začátku není potřeba nic kupovat. „Nepotřebujete hardware RTX Spark, abyste mohli začít – použít se dá existující vývojový systém s&nbsp;Windows na Armu,“ píše NVIDIA v&nbsp;oznámení (přeloženo z&nbsp;angličtiny). Programátoři si tak mohou aplikaci přeložit, najít v&nbsp;ní závislosti, které pro Arm neexistují, a&nbsp;připravit první sestavení dřív, než se čip vůbec objeví v&nbsp;prodeji. Ověření na skutečném RTX Sparku má podle stejného textu přijít, „až bude podporovaný hardware a&nbsp;software k&nbsp;dispozici“ (rovněž přeloženo).</p>

<h2>Instalační soubor prozradil, co má chystaný čip uvnitř</h2>

<p>Zajímavější než ovladač sám je jeho instalační předpis. Web <a href="https://www.windowslatest.com/2026/07/18/nvidia-begins-preparing-n1x-windows-11-gpu-drivers-ahead-of-rtx-spark-arm-pcs-launch/" rel="noopener">Windows Latest</a> si 18.&nbsp;července všiml, že soubor <code>nv_surface_woa.inf</code> vyjmenovává dvě zařízení: „NVIDIA RTX Spark N1X (6144-core Blackwell RTX GPU)“ a&nbsp;„NVIDIA RTX Spark N1X (5120-core Blackwell RTX GPU)“. Chystaný čip tedy nepřijde v&nbsp;jediné podobě, ale nejméně ve dvou, a&nbsp;liší se počtem jader grafické části.</p>

<p>Vyšší z&nbsp;nich odpovídá tomu, co Microsoft uvedl na začátku června při ohlášení notebooku Surface Laptop Ultra: dvacetijádrové procesorové pole složené z&nbsp;deseti jader Cortex-X925 a&nbsp;deseti Cortex-A725, grafika se 6&nbsp;144 jádry architektury Blackwell a&nbsp;až 128&nbsp;GB paměti sdílené mezi procesorem a&nbsp;grafikou. Server <a href="https://www.pcworld.com/article/3152382/microsoft-surface-laptop-ultra-announced.html" rel="noopener">PCWorld</a> k&nbsp;tomu dodává, že stejný počet grafických jader má stolní karta GeForce RTX 5070.</p>

<p>Co N1X umí ve výpočtech, zatím nikdo nezměřil. Microsoft u&nbsp;svého notebooku mluví o&nbsp;výkonu „až petaflop“ v&nbsp;úlohách umělé inteligence, což je údaj výrobce, ne výsledek nezávislého testu.</p>

<h2>Co zatím nefunguje</h2>

<p>Omezení vypisuje NVIDIA v&nbsp;oznámení sama. Nástroj Nsight Copilot je na Windows ARM64 v&nbsp;tomto preview vypnutý a&nbsp;nedostupný. U&nbsp;knihovny PyTorch firma varuje, že spuštění jejích testovacích úloh v&nbsp;režimu CI/CD může vyvolat vypršení časového limitu grafiky. Balík není finální vydání a&nbsp;NVIDIA ho tak ani neoznačuje – v&nbsp;názvu souboru i&nbsp;v&nbsp;titulku oznámení stojí <em>Developer Preview</em>.</p>

<p>Ovladač 616.00 navíc obsluhuje pouze hardware RTX Spark. Na žádnou jinou grafickou kartu NVIDIE se nevztahuje, což u&nbsp;vývojářského balíku mířícího na jediné zařízení dává smysl.</p>

<h2>Proč na tom pro Arm záleží</h2>

<p>Windows na Armu naráží dlouhodobě na tentýž problém: software napsaný pro x86 na něm buď neběží, nebo běží v&nbsp;emulaci a&nbsp;pomaleji. U&nbsp;výpočtů na grafické kartě byla situace horší, protože chyběla samotná knihovna – a&nbsp;bez CUDA se neobejde většina nástrojů kolem strojového učení. Vydáním pro Arm64 se ta mezera zavírá. Zatím ovšem jen ve vývojářské podobě a&nbsp;pro jedinou chystanou platformu; to je hodnocení redakce, ne tvrzení výrobce.</p>

<p>Kdy se hardware objeví, NVIDIA v&nbsp;oznámení neuvádí. Podle Windows Latest se první stroje s&nbsp;RTX Sparkem čekají na podzim a&nbsp;kromě Surface Laptopu Ultra se mluví o&nbsp;Lenovu Yoga Pro 9n. Microsoft u&nbsp;svého notebooku uvedl podzim 2026 rovněž, cenu ale zatím neřekl.</p>

<p>Vydání ovladače tedy není zpráva o&nbsp;výkonu, ale o&nbsp;načasování. NVIDIA dala vývojářům zhruba dva měsíce náskok, aby jejich programy fungovaly hned první den prodeje – a&nbsp;mimoděk jim přitom v&nbsp;obyčejném textovém souboru prozradila, kolik variant čipu chystá.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-16-nvidia-sidlo-30c365b0.jpg" length="420138" type="image/jpeg" />
		</item>
		<item>
			<title>Poslední beta Pythonu 3.15 je venku, výchozím kódováním bude UTF-8</title>
			<link>https://tech-blog.chatujme.cz/clanek/python-315-posledni-beta-utf8</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/python-315-posledni-beta-utf8</guid>
			<pubDate>Fri, 27 Feb 2026 11:53:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<description><![CDATA[Čtvrtá a poslední beta Pythonu 3.15 vyšla 18. července ze sprintů konference EuroPython v Krakově. Ostrá verze má přijít 1. října a přinese změnu, kterou pozná i ten, kdo do útrob jazyka nikdy nekoukal: soubor otevřený bez uvedeného kódování se bude číst jako UTF-8, ať systém tvrdí cokoli.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-m2-13-python-terminal-eeef4c93.jpg" alt="Interpret Pythonu spuštěný v terminálu"><figcaption>Interpret Pythonu v&nbsp;terminálu. Nové výchozí kódování se týká i&nbsp;výstupu do konzole. Ilustrační snímek. Foto: 9002Jack, Wikimedia Commons (CC0)</figcaption></figure>

<p>Release manager Hugo van Kemenade vydal 18.&nbsp;července čtvrtou betu Pythonu 3.15. Je poslední plánovaná: nové funkce do jazyka nesměly přibývat už od 7.&nbsp;května, kdy vyšla beta první, a&nbsp;od téhle chvíle se nemá měnit ani binární rozhraní, na které se váží knihovny psané v&nbsp;jazyce C. První kandidát na vydání má vyjít 4.&nbsp;srpna, druhý 1.&nbsp;září a&nbsp;ostrá verze 1.&nbsp;října 2026.</p>

<p>Podle plánu vydání dostane 3.15 opravné aktualizace zhruba jednou za dva měsíce po dobu dvou let, bezpečnostní pak až do roku 2031. Novinek je uvnitř dlouhý seznam, tři z&nbsp;nich ale stojí za pozornost, i&nbsp;když s&nbsp;Pythonem jen občas něco spustíte.</p>

<h2>Výchozí kódování určuje Python, ne systém</h2>

<p>Dosud platilo, že když program otevře soubor bez uvedení kódování, použije se to, které hlásí systém. Na Linuxu z&nbsp;toho vycházelo UTF-8 skoro vždycky, na Windows se řídilo národním nastavením, a&nbsp;tentýž skript tak na dvou počítačích četl tentýž soubor jinak. Od 3.15 to neplatí: dokumentace uvádí, že Python nově používá UTF-8 jako výchozí kódování nezávisle na prostředí systému, takže volání <code>open('flying-circus.txt')</code> bez dalšího údaje čte v&nbsp;UTF-8. Týká se to i&nbsp;standardního vstupu a&nbsp;výstupu a&nbsp;rour mezi programy.</p>

<p>Změnu popisuje PEP 686 od Inady Naokiho, který je od 3.15 ve stavu Final. Jeho argument je prostý: UTF-8 se stalo faktickým standardem u&nbsp;formátů jako JSON, TOML nebo YAML i&nbsp;u&nbsp;editorů a&nbsp;webů, a&nbsp;rozdílné chování Pythonu na různých systémech je zdrojem chyb, které ostatní jazyky neřeší.</p>

<p>Nepříjemná část je v&nbsp;oddílu o&nbsp;zpětné kompatibilitě téhož dokumentu. Program, který se na dosavadní výchozí kódování spoléhal, může podle PEPu skončit chybou <code>UnicodeError</code>, vypsat zpřeházené znaky, nebo si tiše poškodit data (v&nbsp;originále „silent data corruption“). Nejvíc to dopadá na Windows, kde bylo výchozí kódování dosud odvozené od nastavení systému. Staré chování se vrací proměnnou prostředí <code>PYTHONUTF8=0</code> nebo přepínačem <code>-X utf8=0</code>; režim UTF-8 se tedy dá i&nbsp;nadále vypnout, jen se nově nemusí zapínat. Dokumentace k&nbsp;tomu dodává, že nejlepší je kódování u&nbsp;každého otevření souboru napsat výslovně.</p>

<h2>Líný import existuje, ale musí se vyžádat</h2>

<p>Druhá viditelná novinka je klíčové slovo <code>lazy</code>. Zápisem <code>lazy import json</code> nebo <code>lazy from pathlib import Path</code> se modul nenačte hned, ale až ve chvíli, kdy program se jménem poprvé opravdu pracuje. Import tak může zůstat nahoře v&nbsp;souboru, kam patří, aniž by se za něj platilo při každém spuštění.</p>

<pre><code class="language-python">lazy import json
lazy from pathlib import Path

print("Starting up...")  # json ani pathlib zatím načtené nejsou

data = json.loads('{"key": "value"}')  # tady se načte json
p = Path(".")                          # a tady pathlib</code></pre>

<p>PEP 810 zdůrazňuje, že jde o&nbsp;volbu, ne o&nbsp;změnu chování: existující programy běží dál stejně, dokud si o&nbsp;líné načítání někdo neřekne. Kdo ho chce zapnout plošně bez zásahu do kódu, má na to přepínač <code>-X lazy_imports</code> a&nbsp;proměnnou <code>PYTHON_LAZY_IMPORTS</code>. Omezení jsou tvrdá – <code>lazy</code> smí stát jen na úrovni modulu, uvnitř funkce, těla třídy nebo bloku <code>try</code> skončí chybou syntaxe, a&nbsp;stejně dopadne hvězdičkový import i&nbsp;import z&nbsp;<code>__future__</code>.</p>

<p>S&nbsp;čísly je to horší. PEP mluví o&nbsp;zkrácení startu o&nbsp;50 až 70&nbsp;procent u&nbsp;nástrojů příkazové řádky a&nbsp;o&nbsp;úspoře paměti 30 až 40&nbsp;procent „v&nbsp;reálném provozu“, u&nbsp;žádného z&nbsp;nich ale neuvádí, odkud se vzalo. Jediný údaj s&nbsp;doloženým zdrojem je zrychlení startu o&nbsp;10 až 20&nbsp;procent u&nbsp;aplikací postavených na PySide, kde PEP odkazuje na konkrétní hlášení v&nbsp;systému chyb Qt. Doložená je i&nbsp;jiná věc: v&nbsp;samotné standardní knihovně je už dnes zhruba 17&nbsp;procent importů mimo testy schovaných uvnitř funkcí, tedy skoro 3&nbsp;500 importů v&nbsp;730 souborech. Líné načítání si tedy vývojáři dělali ručně dávno, jen kvůli tomu musel import z&nbsp;hlavičky souboru zmizet dovnitř funkce.</p>

<p>Rychlost nástrojů je téma i&nbsp;v&nbsp;jiných jazycích. TypeScript kvůli ní <a href="/clanek/typescript-7-prekladac-v-go">přepsal celý překladač do Go</a> a&nbsp;sestavení tím zkrátil na osminu až dvanáctinu.</p>

<h2>Rozšíření pro běh bez globálního zámku mají vlastní stabilní ABI</h2>

<p>Třetí změna je pod povrchem a&nbsp;týká se knihoven psaných v&nbsp;C. Python má v&nbsp;běžném sestavení globální zámek interpretu, který pouští ke kódu v&nbsp;jednu chvíli jen jedno vlákno. Od verze 3.13 vedle něj existuje sestavení bez tohoto zámku a&nbsp;od 3.14 se nepovažuje za pokus, jenže rozšíření se pro něj musela stavět zvlášť pro každou verzi Pythonu.</p>

<p>PEP 803 od Petra Viktorina a&nbsp;Nathana Goldbauma zavádí variantu stabilního rozhraní <code>abi3t</code>, ve které jde rozšíření přeložit jednou a&nbsp;používat i&nbsp;na sestaveních bez zámku. Cena za to není malá. Struktura <code>PyObject</code> se stává neprůhlednou, takže se do ní nesmí sahat přímo ani ji vkládat do vlastních struktur; knihovna musí přejít na rozhraní zavedené v&nbsp;PEP 697 a&nbsp;místo dosavadní vstupní funkce <code>PyInit_</code> použít nový vývozní bod <code>PyModExport_</code> z&nbsp;PEP 793. Dokumentace navíc upozorňuje, že stabilní rozhraní nenabízí všechno, co CPython umí – kdo se do něj nevejde, staví dál zvlášť pro klasické stabilní ABI a&nbsp;zvlášť pro verzi bez zámku.</p>

<p>Drobnost pro uživatele Maců: oficiální instalátory pro macOS nově instalují podporu běhu bez globálního zámku ve výchozím stavu.</p>

<h2>Co se ještě do 3.15 vešlo</h2>

<p>Vedle toho přibývá neměnný slovník <code>frozendict</code>, vestavěný typ <code>sentinel</code> pro zástupné hodnoty, rozbalování v&nbsp;seznamových a&nbsp;podobných zkrácených zápisech, samostatný balíček na profilování s&nbsp;novým vzorkovacím profilerem Tachyon a&nbsp;ukazatele na rámce zapnuté ve výchozím stavu, což usnadňuje sledování běžícího programu nástroji operačního systému. Překladač JIT se podle poznámek k&nbsp;vydání výrazně změnil; konkrétní naměřené zrychlení v&nbsp;nich ale není, a&nbsp;čísla, která kolují po přetiscích, se nedají doložit z&nbsp;původního zdroje.</p>

<p>Do ostré verze zbývají dva kandidáti na vydání a&nbsp;dva měsíce. Kdo spravuje kód, který otevírá soubory bez uvedeného kódování, má právě teď nejlepší příležitost zjistit, kolik takových míst v&nbsp;něm vlastně je.</p>

<p>Zdroje: <a href="https://blog.python.org/2026/07/python-3150-beta-4/" target="_blank" rel="noopener">oznámení Python 3.15.0b4</a> na blogu vývojářů, <a href="https://docs.python.org/3.15/whatsnew/3.15.html" target="_blank" rel="noopener">poznámky k&nbsp;vydání 3.15</a>, návrhy <a href="https://peps.python.org/pep-0686/" target="_blank" rel="noopener">PEP 686</a>, <a href="https://peps.python.org/pep-0810/" target="_blank" rel="noopener">PEP 810</a> a&nbsp;<a href="https://peps.python.org/pep-0803/" target="_blank" rel="noopener">PEP 803</a>, plán vydání <a href="https://peps.python.org/pep-0790/" target="_blank" rel="noopener">PEP 790</a> a&nbsp;text <a href="https://www.theregister.com/devops/2026/05/11/feature-freeze-for-python-315-as-first-beta-released/5237934" target="_blank" rel="noopener">Tima Andersona na The Register</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-m2-13-python-terminal-eeef4c93.jpg" length="47734" type="image/jpeg" />
		</item>
		<item>
			<title>Rust 1.97 zapnul nové kódování symbolů, backtrace konečně dává smysl</title>
			<link>https://tech-blog.chatujme.cz/clanek/rust-197-mangling-v0</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/rust-197-mangling-v0</guid>
			<pubDate>Wed, 25 Feb 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Počítače</category>
			<category>Programování</category>
			<description><![CDATA[Vydání Rustu 1.97 z 9. července přepnulo výchozí kódování symbolů na schéma v0. Výpisy zásobníku i profilery díky tomu ukážou, s jakými konkrétními typy byla obecná funkce zavolaná, místo aby to schovaly za hash. Zmizelo i tiché polykání hlášek linkeru.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-03-kod-3441eef0.jpg" alt="Zdrojový kód na obrazovce monitoru"><figcaption>Změna se neprojeví v&nbsp;kódu, ale až ve chvíli, kdy program spadne. Foto: Markus Spiske, Wikimedia Commons (CC0)</figcaption></figure>

<p>Rust 1.97 vyšel 9.&nbsp;července a&nbsp;na první pohled je to nezajímavé vydání: pár nových metod na celých číslech, drobnost v&nbsp;Cargu. Jenže obsahuje jednu změnu, kterou pozná každý, kdo někdy ladil pád aplikace v&nbsp;uvolněném sestavení. Kompilátor od této verze používá jako výchozí kódování symbolů schéma v0.</p>

<h2>Co je kódování symbolů a&nbsp;proč na něm záleží</h2>

<p>Když překladač vyrobí binárku, musí každou funkci pojmenovat jedním řetězcem v&nbsp;tabulce symbolů. To jméno smí obsahovat jen omezenou sadu znaků, takže se cesta k&nbsp;funkci i&nbsp;její typové parametry zakódují do jednoho slova. Tomu se říká mangling, tedy zkomolení jména.</p>

<p>Podle tohoto jména se pak orientuje ladicí program, profiler i&nbsp;výpis zásobníku po pádu. Když je kódování špatné, ladicí nástroje zobrazí místo funkce jen shluk znaků a&nbsp;vývojář hádá.</p>

<p>Rust do teď používal starší schéma, které si s&nbsp;obecným kódem neporadilo. Pokud jste měli funkci s&nbsp;typovým parametrem a&nbsp;zavolali ji pro deset různých typů, vzniklo deset různých funkcí, jenže jejich konkrétní typy se do jména nedostaly. Nahradil je hash. Ve výpisu jste tedy viděli, že spadla nějaká varianta obecné funkce, ale ne která.</p>

<h2>Co dělá v0 jinak</h2>

<p>Schéma v0 vzniklo podle návrhu <a href="https://www.rfc-editor.org/rfc/rfc2603.html" rel="noopener" target="_blank">RFC 2603</a> a&nbsp;jeho hlavní vlastnost je obousměrnost. Kódování je navržené tak, aby z&nbsp;výsledného jména šlo zpětně přečíst, co v&nbsp;něm bylo, včetně typových parametrů. Oznámení k&nbsp;vydání to shrnuje jednou větou: dosazení obecných parametrů si zachovává své hodnoty, místo aby bylo sledované jen za hashem.</p>

<p>Kromě typů umí v0 zakódovat i&nbsp;životnosti, konstantní generické parametry, meze s&nbsp;vyšším řádem, uzávěry a&nbsp;další konstrukce, na které starší schéma nemyslelo. Jména používají jen znaky A–Z, a–z, 0–9 a&nbsp;podtržítko, takže projdou beze změny každým linkerem. Aby přitom nebyla nekonečně dlouhá, používá formát zpětné odkazy na už zakódované části.</p>

<p>Ukázkový symbol ve formátu v0 vypadá takto:</p>

<blockquote><p>_RNvMsr_NtCs3ssYzQotkvD_3std4pathNtB5_7PathBuf3newCs15kBYyAo9fc_7mycrate</p></blockquote>

<p>Po rozkódování je z&nbsp;něj čitelné <em>&lt;std::path::PathBuf&gt;::new</em>.</p>

<p>Samotné schéma není novinka. Zapnout se dalo ručně přepínačem od verze 1.59, tedy od února 2022. Novinkou je, že se čtyři a&nbsp;půl roku poté stalo výchozím.</p>

<h2>Na co si dát pozor</h2>

<p>Dokumentace kompilátoru na dvou místech mírní očekávání. Zaprvé: v0 není stabilní binární rozhraní Rustu. Je definované natolik, aby z&nbsp;něj šlo vyrobit čitelný tvar, ne aby se na jeho podobu daly vázat cizí nástroje.</p>

<p>Zadruhé: neexistuje jediný předepsaný způsob, jak symbol zobrazit. Dokumentace doporučuje oddělovat cesty dvojtečkami, psát implementace vlastností jako <em>&lt;Typ as Vlastnost&gt;</em> a&nbsp;uzávěry jako <em>{closure#N}</em>, ale je to doporučení, ne norma. Dva profilery tedy mohou tentýž symbol vypsat jinak.</p>

<p>Nástroje, které rozkódování zvládají, mají podle dokumentace při setkání s&nbsp;neznámou značkou raději vypsat původní zkomolené jméno než spadnout. Kdo používá starší verzi ladicího programu nebo vlastní nástroj nad tabulkou symbolů, měl by po přechodu na 1.97 zkontrolovat, že to skutečně dělá.</p>

<h2>Zbytek vydání</h2>

<p>Druhá praktická změna se týká linkeru. Jeho hlášky se dosud zahazovaly; nově se zobrazují jako varování pod kontrolou lintu <em>linker_messages</em>. Potíže s&nbsp;linkováním se tak nebudou projevovat až záhadným chováním výsledné binárky.</p>

<p>Cargo umí nově řídit chování varování přes proměnnou prostředí <em>CARGO_BUILD_WARNINGS</em> s&nbsp;hodnotami allow, warn a&nbsp;deny. Podstatné je, že změna této hodnoty neshodí vyrovnávací paměť sestavení, takže přepnutí na deny v&nbsp;průběžné integraci nestojí celý překlad znovu.</p>

<p>Ze standardní knihovny přibyly metody pro práci s&nbsp;bity celých čísel: <em>isolate_highest_one</em>, <em>isolate_lowest_one</em>, <em>highest_one</em>, <em>lowest_one</em> a&nbsp;u&nbsp;typů bez znaménka <em>bit_width</em>. Stejná sada je i&nbsp;na typech <em>NonZero</em>. Metoda <em>char::is_control</em> je nově použitelná v&nbsp;konstantním kontextu.</p>

<p>O&nbsp;týden později, 16.&nbsp;července, vyšla opravná verze 1.97.1.</p>

<p>Zdroje: <a href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/" rel="noopener">oznámení vydání na blogu projektu Rust</a> a&nbsp;<a href="https://doc.rust-lang.org/rustc/symbol-mangling/v0.html" rel="noopener">kapitola o&nbsp;kódování v0 v&nbsp;příručce kompilátoru</a>.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-03-kod-3441eef0.jpg" length="546266" type="image/jpeg" />
		</item>
		<item>
			<title>Chrome, Edge i Firefox přejdou na vydávání každé dva týdny</title>
			<link>https://tech-blog.chatujme.cz/clanek/prohlizece-dvoutydenni-cyklus</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/prohlizece-dvoutydenni-cyklus</guid>
			<pubDate>Sat, 07 Feb 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<category>Internet a sítě</category>
			<description><![CDATA[Během několika měsíců oznámily všechny tři velké prohlížeče totéž: nová hlavní verze bude vycházet každé dva týdny místo jednou za čtyři. Edge začne 27. srpna, Firefox 1. září a Chrome 8. září 2026. Firemní větve s pomalejším tempem zůstávají, Mozilla svůj krok označuje za pokus.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-13-prohlizece-3bacdba1.jpg" alt="Okno webového prohlížeče Google Chrome ve Windows 11"><figcaption>Číslo verze v&nbsp;prohlížeči poroste od podzimu dvakrát rychleji. Na snímku Chrome 96 ve Windows 11. Foto: Google LLC a&nbsp;Wikimedia Foundation, Wikimedia Commons (CC0)</figcaption></figure>

<p>Prohlížeč se dnes aktualizuje sám a&nbsp;většina lidí si čísla verzí nevšimne. Přesto se během letoška stalo něco, co se nestává: všichni tři velcí výrobci nezávisle na sobě oznámili stejnou změnu. Hlavní verze bude nově vycházet každé dva týdny místo jednou za čtyři.</p>

<h2>Kdo kdy začne</h2>

<p>První je na řadě <strong>Microsoft Edge</strong>. Podle oznámení na firemním blogu z&nbsp;11.&nbsp;června začíná dvoutýdenní tempo verzí 152, která vyjde 27.&nbsp;srpna 2026.</p>

<p><strong>Firefox</strong> naváže o&nbsp;pět dní později. Verze 154 z&nbsp;18.&nbsp;srpna bude poslední vydaná v&nbsp;dosavadním rytmu, Firefox 155 přijde 1.&nbsp;září. Změnu oznámil ředitel Mozilly Sylvestre Ledru v&nbsp;polovině července ve vývojářské konferenci dev-platform, tedy v&nbsp;mailové skupině, kde se probírá vývoj jádra prohlížeče. Týká se počítačů i&nbsp;Androidu.</p>

<p><strong>Chrome</strong> je z&nbsp;celé trojice první, kdo o&nbsp;tom mluvil, a&nbsp;poslední, kdo to spustí. Google zveřejnil plán už 3.&nbsp;března a&nbsp;dvoutýdenní cyklus u&nbsp;něj startuje verzí 153 osmého září. Platí pro počítače, Android i&nbsp;iOS; větve Dev a&nbsp;Canary zůstávají beze změny. Beta každé verze vyjde tři týdny před její stabilní podobou. V&nbsp;praxi to znamená zhruba šestadvacet hlavních vydání ročně místo dosavadních třinácti.</p>

<h2>Rychleji neznamená víc</h2>

<p>Zásadní je, co se <em>nemění</em>. Množství novinek zůstává stejné, jen se rozdělí na dvojnásobek dávek. Microsoft to popisuje přímo: každé vydání přinese „zhruba polovinu obsahu než dřív, zato dvakrát častěji“.</p>

<p>Stejně to formuluje i&nbsp;Mozilla. Zkrácení cyklu podle ní neznamená, že by se na hotovou práci mělo tlačit rychleji – funkce, které nejsou připravené, se nemají uspěchat a&nbsp;mohou zrát dál. Smysl je opačný: to, co už hotové je, nemusí čekat další tři týdny na nejbližší vlak.</p>

<p>Z&nbsp;toho plyne i&nbsp;druhý efekt, o&nbsp;kterém výrobci mluví méně nahlas. Když jede vlak každých čtrnáct dní, klesá tlak na takzvané uplifty, tedy dodatečné protlačování oprav do už uzavřené verze. Uplift je vždycky riziko: mění se kód, který už nikdo znovu neprošel celý. Čím menší dávka změn a&nbsp;čím kratší čekání, tím méně důvodů ho použít.</p>

<h2>Firmy o&nbsp;pomalejší větev nepřijdou</h2>

<p>Rychlejší tempo je noční můra každého, kdo v&nbsp;podniku validuje prohlížeč proti interním aplikacím. Proto zůstává zachovaná pomalá větev.</p>

<p>U&nbsp;Chromu se Extended Stable nemění vůbec – dál vychází jednou za osm týdnů. Edge má stejný interval, jen se přepočítal na nové číslování: aktualizace dostane každé čtvrté vydání, tedy verze 156, 160, 164 a&nbsp;tak dál. Model podpory ani harmonogram se u&nbsp;něj podle Microsoftu nemění.</p>

<p>Správcům, kteří na osmitýdenní větvi zůstanou, Microsoft doporučuje přidat pilotní skupinu uživatelů na kanál Beta a&nbsp;testovat od prvního dne, aby měli na ověření co nejvíc času. Pro tenhle účel nabízí Enterprise Preview s&nbsp;návodem pro správu.</p>

<h2>Co z&nbsp;toho mají weboví vývojáři</h2>

<p>Pro toho, kdo dělá weby, se mění hlavně rychlost, se kterou se nová vlastnost prohlížeče stane použitelnou.</p>

<p>Kdo dnes dokončí funkci těsně po uzavření vlaku, čeká na další skoro čtyři týdny. Nově budou nejvýš dva. U&nbsp;vlastností, které se v&nbsp;prohlížečích objevují postupně, se tím zkracuje doba, po kterou musí web počítat se dvěma různými chováními naráz.</p>

<p>Druhá strana mince je testování. Kdo hlídá vlastní aplikaci proti konkrétním verzím prohlížeče, bude mít dvakrát tolik cílů. Automatizované testy to zvládnou, ruční matice podporovaných verzí se ale bude potřeba přepsat – a&nbsp;to se týká i&nbsp;toho, jak dlouho drží platnost výsledky staršího testovacího kola.</p>

<h2>Mozilla mluví o&nbsp;pokusu</h2>

<p>Ze tří oznámení je nejopatrnější to od Mozilly. Firma dvoutýdenní cyklus výslovně označuje za experiment a&nbsp;připouští, že od něj může ustoupit, kdyby se objevily nečekané problémy. Chrome ani Edge takovou podmínku ve svých oznámeních nemají.</p>

<p>Rozdíl dává smysl. Mozilla má výrazně menší tým než Google a&nbsp;Microsoft a&nbsp;její vydávací proces je vázaný na jednu kódovou základnu bez zázemí velké platformy. Že se do stejného kroku pouští i&nbsp;tak, hodně vypovídá o&nbsp;tom, jak silný je dnes tlak držet krok s&nbsp;tempem Chromu – ať už jde o&nbsp;nové vlastnosti webu, nebo o&nbsp;bezpečnostní záplaty.</p>

<p>Pro běžného uživatele se v&nbsp;praxi nezmění skoro nic. Prohlížeč se aktualizuje na pozadí a&nbsp;nová čísla verzí poletí dvakrát rychleji, aniž by si toho kdokoli všiml. Zajímavější je, že se tři konkurenti bez domluvy shodli na tom, že měsíční cyklus už není správná délka.</p>

<p>Zdroje: <a href="https://developer.chrome.com/blog/chrome-two-week-release" rel="noopener">oznámení Chromu na developer.chrome.com</a>, <a href="https://blogs.windows.com/msedgedev/2026/06/11/faster-updates-enterprise-friendly-schedule-the-new-microsoft-edge-release-cycle/" rel="noopener">blog Microsoft Edge</a> a&nbsp;<a href="https://whattrainisitnow.com/calendar/" rel="noopener">kalendář vydání Firefoxu</a>, ve kterém jsou termíny verzí 154 až 157 čtrnáct dní po sobě.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-13-prohlizece-3bacdba1.jpg" length="53831" type="image/jpeg" />
		</item>
		<item>
			<title>LiberShare staví sdílení souborů bez centrálních indexerů na libp2p a formátu LISH</title>
			<link>https://tech-blog.chatujme.cz/clanek/libershare-lish</link>
			<guid isPermaLink="true">https://tech-blog.chatujme.cz/clanek/libershare-lish</guid>
			<pubDate>Thu, 05 Feb 2026 09:00:00 GMT</pubDate>
			<dc:creator>Tech-blog</dc:creator>
			<category>Programování</category>
			<category>Internet a sítě</category>
			<description><![CDATA[LiberShare je software na sdílení souborů, který se obejde bez centrálních indexerů. Stojí na knihovně libp2p, spojení navazuje přes WebRTC a peery hledá v distribuované hašovací tabulce. Aby se ale nový uzel do sítě vůbec dostal, potřebuje adresu aspoň jednoho takzvaného bootstrap peeru. Vývoj běží od října 2025, kód je ve veřejné doméně, verze zatím žádná nevyšla.]]></description>
			<content:encoded><![CDATA[<figure><img src="/uploads/foto-18-dht-7f50d8af.jpg" alt="Schéma strukturované sítě peer-to-peer s distribuovanou hašovací tabulkou"><figcaption>Strukturovaná síť peer-to-peer: uzly se hledají navzájem přes distribuovanou hašovací tabulku, žádný z&nbsp;nich není nadřazený. Na stejném principu stojí i&nbsp;vyhledávání peerů v&nbsp;LiberShare. Foto: Mesoderm, Wikimedia Commons (CC0)</figcaption></figure>

<p>Sdílení souborů mezi lidmi má na internetu dlouhou historii a&nbsp;jednu opakující se slabinu: i&nbsp;sítě, které se tvářily jako decentralizované, obvykle stály na několika serverech, kde se dalo hledat. Když ty spadly nebo je někdo vypnul, síť samotná sice žila dál, ale nikdo v&nbsp;ní nic nenašel. LiberShare zkouší postavit sdílení tak, aby takové místo neexistovalo.</p>

<h2>Co to je</h2>

<p>Projekt se sám popisuje jako „software pro sdílení souborů peer-to-peer postavený na moderních decentralizovaných technologiích“ (v&nbsp;překladu z&nbsp;angličtiny). Vyvíjí ho organizace Libersoft, tedy stejná parta, která staví operační systém <a href="/clanek/libersystem-prehled">LiberSystem</a>.</p>

<p>Kód je veřejný na GitHubu a&nbsp;uvolněný pod licencí <strong>Unlicense</strong>, což znamená vzdání se autorských práv, jak jen to právní řády dovolují – prakticky veřejná doména.</p>

<h2>Jak se peery hledají navzájem</h2>

<p>Základ je knihovna <strong>libp2p</strong>, tedy stavebnice pro sítě peer-to-peer, kterou zná i&nbsp;svět kolem IPFS. Přímé spojení mezi dvěma počítači navazuje LiberShare přes <strong>WebRTC</strong>. Ten se běžně používá na videohovory v&nbsp;prohlížeči a&nbsp;umí se prokousat přes domácí routery, které jinak příchozí spojení nepouštějí.</p>

<p>Vyhledávání peerů řeší <strong>distribuovaná hašovací tabulka</strong>, konkrétně Kademlia z&nbsp;libp2p. Zjednodušeně: seznam „kdo co má“ není nikde celý. Každý uzel drží kousek a&nbsp;dotaz se k&nbsp;cíli doptává po několika skocích. Právě tohle je ten rozdíl proti starším sítím – není centrální rejstřík, který by šlo vypnout.</p>

<p>Úplně bez pevného bodu se to ale neobejde. Nastavení sítě podle specifikace <strong>povinně obsahuje seznam takzvaných bootstrap peerů</strong> – adres, na které se nový uzel připojí jako první, aby vůbec někoho poznal. Rozdíl proti serveru je v&nbsp;tom, že bootstrap peer nic neindexuje ani nezprostředkovává přenosy; slouží jen jako dveře do sítě a&nbsp;může jich být uvedeno víc. Kdo si založí vlastní síť, uvede prostě adresu svého uzlu.</p>

<h2>Vlastní formát místo torrentu</h2>

<p>Místo souborů <code>.torrent</code> má projekt vlastní formát, kterému říká <strong>LISH</strong>. Je popsaný ve třech specifikacích přímo v&nbsp;repozitáři: datový formát, formát sítě a&nbsp;síťový protokol. Poslední z&nbsp;nich je označený jako verze 1 z&nbsp;24.&nbsp;října 2025.</p>

<p>Formát je postavený na JSONu, takže se dá otevřít v&nbsp;textovém editoru a&nbsp;přečíst. Nese strukturu adresářů, oprávnění a&nbsp;údaje pro ověření celistvosti dat. Protokol z&nbsp;něj skládá přenosy, které se dají přerušit a&nbsp;navázat a&nbsp;které umí táhnout z&nbsp;víc zdrojů naráz.</p>

<h2>Sítě s&nbsp;rolemi, ne jedna velká síť</h2>

<p>Nejméně obvyklá část návrhu je řízení přístupu. LiberShare nepočítá s&nbsp;jednou globální sítí, ale s&nbsp;libovolným počtem sítí, z&nbsp;nichž každá má vlastní pravidla a&nbsp;čtyři role: <strong>vlastníci</strong>, <strong>správci</strong>, <strong>vydavatelé</strong> a&nbsp;<strong>stahující</strong>.</p>

<p>Vlastník mění nastavení sítě a&nbsp;přiděluje ostatní role, správce může přidávat vydavatele a&nbsp;stahující, vydavatel smí do sítě přidávat obsah. Dvě nepovinná nastavení pak určují, jestli publikovat a&nbsp;stahovat smí opravdu jen ti, kdo mají příslušnou roli, nebo kdokoliv. Ve výchozím stavu je síť otevřená.</p>

<p>Prakticky to znamená, že tatáž technologie může sloužit jak veřejné síti, kam přispívá kdokoliv, tak uzavřené skupině – třeba filmovému archivu, kde publikovat smí hrstka lidí a&nbsp;stahovat okruh členů.</p>

<h2>V&nbsp;jakém je to stavu</h2>

<p>Tady je namístě střízlivost. Repozitář vznikl 22.&nbsp;října 2025, má přes patnáct set commitů a&nbsp;tři přispěvatele, poslední změny jsou z&nbsp;posledních dnů. <strong>Zároveň ale zatím nevyšla žádná verze</strong> – sekce vydání je prázdná a&nbsp;k&nbsp;dispozici je jen zdrojový kód.</p>

<p>Podle údajů GitHubu je většina kódu v&nbsp;TypeScriptu, k&nbsp;tomu přibližně třetina objemu v&nbsp;Svelte, tedy uživatelské rozhraní. Menší podíl tvoří instalátor pro Windows, skripty a&nbsp;kousek Rustu. Popularita je zatím komorní: jednačtyřicet hvězd a&nbsp;tři forky.</p>

<h2>Proč to sledovat</h2>

<p>Zajímavé na projektu není to, že dělá sdílení souborů – to umí kdejaký klient BitTorrentu, a&nbsp;lépe, protože má za sebou dvě desetiletí ladění. Zajímavé je spojení tří věcí, které se obvykle nepotkávají: síť bez indexeru, přístupová práva uvnitř sítě a&nbsp;rozhraní, které vypadá jako přehrávač médií, ne jako správce stahování.</p>

<p>Jestli to dopadne, se pozná až podle první vydané verze a&nbsp;podle toho, kolik lidí ji rozběhne naráz. Distribuovaná hašovací tabulka na papíře funguje vždycky; teprve provoz ukáže, jak se chová, když je uzlů málo nebo když polovina z&nbsp;nich sedí za přísným routerem.</p>

<p>Zdroje: <a href="https://github.com/libersoft-org/libershare" rel="noopener">repozitář LiberShare na GitHubu</a> včetně specifikace <a href="https://github.com/libersoft-org/libershare/blob/main/LISH_NETWORK_PROTOCOL.md" rel="noopener">síťového protokolu LISH</a>; údaje o&nbsp;rozsahu a&nbsp;stáří kódu pocházejí z&nbsp;veřejného rozhraní GitHubu, ne z&nbsp;tvrzení projektu.</p>]]></content:encoded>
			<enclosure url="https://tech-blog.chatujme.cz/uploads/foto-18-dht-7f50d8af.jpg" length="57312" type="image/jpeg" />
		</item>
	</channel>
</rss>
