Ubuntu 26.04 patrně bude ve výchozím nastavení zobrazovat hvězdičky při zadávání hesla příkazu sudo, změna vychází z nové verze sudo-rs. Ta sice zlepší použitelnost systému pro nové uživatele, na které mohlo 'tiché sudo' působit dojmem, že systém 'zamrzl' a nijak nereaguje na stisky kláves, na druhou stranu se jedná o možnou bezpečnostní slabinu, neboť zobrazování hvězdiček v terminálu odhaluje délku hesla. Původní chování příkazu sudo
… více »Projekt systemd schválil kontroverzní pull request, který do JSON záznamů uživatelů přidává nové pole 'birthDate', datum narození, tedy údaj vyžadovaný zákony o ověřování věku v Kalifornii, Coloradu a Brazílii. Jiný pull request, který tuto změnu napravoval, byl správcem projektu Lennartem Poetteringem zamítnut s následujícím zdůvodněním:
… více »Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 163 (pdf).
Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Aktuální vývojová verze jádra je 3.5-rc2, vydaná Linusem dne 8. června. Řekl bych, že -rc2 je v docela dobrém stavu, opravdu jsem se agresivně snažil revertovat věci, které způsobovaly problémy (a někdy dokonce i věci, které jsem jen podezříval). Od tohoto vydání se toulal světem a vyhrával ceny světového významu, takže přísun změn do jádra se docela zpomalil.
Stabilní aktualizace: verze 3.0.34 a 3.4.2 byly vydány 9. června; verze 3.2.20 vyšla 11. června.
Nejradši bych všechny ty, co na x86_64 používají jádro pro i386 s jiným účelem, než ho jen ozkoušet, naházel do velkého vroucího kotle. Opravdu mě rozčiluje, když lidé provozují i386 na strojích s 16 GB paměti a stěžují si na výkon. highmem by mělo být zakázáno na všech x86_64 systémech s více než 1G RAM a i386 jádrem s takovouhle hláškou:
"Hovado! Proč do p*dele používáš i386 na svém nablýskaném x86_64 stroji s tunami gigabajtů RAM. Nabootuj proboha do jádra pro x86_64 a využij plný potenciál. Tvůj i386 userspace na tom bude fungovat dobře. Jsi jako jeden z těch 75letých dědků, co si konečně můžou pořídit Porsche, aby s ním nakonec jeli 10 mil pod povolenou rychlostí a měli za sebou kolonu aut!"
Toto je jen dalším důkazem, proč vůbec nedává smysl něco měnit ve staré vrstvě IDE. Nikoho to nezajímá a je tu 99,999% riziko, že místo posunu vpřed tam nataháš chyby.
-- David Miller
Vývojář Btrfs Chris Mason oznámil, že opouští Oracle a přidává se ke stále početnějšímu zástupu jaderných hackerů ve Fusion-IO. Z pohledu Btrfs se toho moc nezmění. Nadále budu Btrfs udržovat a budu je otevřeně vyvíjet. Oracle bude stále používat Btrfs ve svých produktech Oracle Linux a budu spolupracovat s distribucemi, kde se Btrfs produkčně nasazuje.
Během debaty o ACPI Alan Cox prohlásil: Během volna jsem se snažil vyhýbat mejdanu anglické královny a z republikána jsem se stával rozčileným republikánem. Linusovu odpověd ale musíte vidět.
I když je jádro důležitou částí snad čehokoliv, co můžete chtít na počítači dělat, je to málokdy jádro samotné, kdo odvede tu zajímavou část práce. Častěji to spíš vypadá, že je jen režií, která zabírá prostředky aplikacím, jež chce uživatel používat. Proto má smysl optimalizovat jaderné operace, co nejvíc to jen jde, zejména když jsou tyto operace vykonávány často a na výkonnostně kritických místech. Rozhraní „word at a time“ (slovo po slovu), které bylo pro verzi 3.5 zoptimalizováno a zobecněno, je dobrou ukázkou toho, jak daleko mohou snahy o optimalizaci dojít.
Jádro provádí spoustu operací nad řetězci, zejména (ale ne výhradně) při práci s cestami souborů. Často je nutné znát délku názvu nebo jen cesty. Programátor v C by obvykle napsal cyklus, kde by procházel řetězcem znak po znaku. Ale když už jde o více řetězců, tak se procházení po znacích stává časově náročným. Ukazuje se, že s dostatkem bitových operací se dá většina této režie vyřešit zpracováváním dat řetězce po 32bitových nebo 64bitových slovech. API „word at a time“ takové zpracovávání umožňuje – ale za cenu složitosti.
Kód, který chce použít toto rozhraní, by měl includovat <asm/word-at-a-time.h>. Uvnitř je definováno několik funkcí, první z nich je has_zero():
unsigned long has_zero(unsigned long value, unsigned long *bits, const struct word_at_a_time *constants);
Na první pohled je has_zero() jednoduchá booleovská funkce, která vrátí true, pokud value obsahuje nulový bajt. Ale co jsou ty dva další parametry? Začněme hodnotou constants, která musí být prostě jen nastavena na hodnotu definovanou v hlavičkovém souboru:
const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
Jak si popíšeme podrobně později, tato struktura obsahuje nějaké ty užitečné konstanty. Struktura je malá a její obsah je závislý na architektuře, takže zřejmě bylo považováno za zbytečné vytvářet jedinou, globálně přístupnou kopii.
Parametr bits je zase místo, kam si has_zero() může ukládat dočasná data, která budou užitečná ostatním funkcím v tomto API. Těmito funkcemi jsou:
unsigned long prep_zero_mask(unsigned long value, unsigned long bits, const struct word_at_a_time *constants); unsigned long create_zero_mask(unsigned long bits); unsigned long find_zero(unsigned long mask);
Jakmile has_zero() našlo slovo obsahující nulový bajt, všechny tyto tři zbylé funkce musí být použity ke zjištění, který bajt obsahuje nulu. Obvyklá sekvence pak používá asi tak následovně:
if (has_zero(value, &bits, &constants)) {
bits = prep_zero_mask(value, bits, &constants);
bits = create_zero_mask(bits);
zero_byte = find_zero(bits);
/* ... */
Dá se to říct tak, že prep_zero_mask() a create_zero_mask() nejprve vezmou hodnotu bits od has_zero() a pak ji upraví tak, aby find_zero() mohlo vrátit pozici prvního nulového bajtu ve slově.
To může vypadat dosti pracně, ale má to svůj důvod. Rozdělení funkčnosti umožňuje různým architekturám poskytovat optimalizované funkce pro každou část procesu. Ale je tu ještě jedna zajímavost: mezi dvěma různými hodnotami bits ze dvou volání prep_zero_mask() lze dělat logický OR. Funkce hash_name() z fs/namei.c používá tuto funkci ke hledání nulového bajtu nebo lomítka – řetězec, který je zkoumán, končí buď nulovým bajtem nebo začátkem další komponenty v cestě. Jádro tráví hodně času zpracováním cest, takže tato optimalizace má smysl.
Je tu ještě jedna věc, na kterou se musí myslet: řetězec nemusí začínat na začátku slova. Zpracování nezarovnaných řetězců všechno ještě více komplikuje; zvědavci se mohou podívat do lib/strnlen_user.c na ukázku, jak se s nimi dá dělat. Suma sumárum, používání tohoto rozhraní věci natolik komplikuje, že to za to téměř nikdy nestojí. Ve výjimečným případech, kdy je procházení znak po znaku příliš náročné, může ale procházení po slovech pomoci.
x86 verze tohoto API je k nalezení v arch/x86/include/asm/word-at-a-time.h; nelze se divit tomu, že části tohoto souboru mohou někomu připadat jako výstup ze soutěže v obfuskovaném C. Začíná se definicí konstant zmíněných výše:
struct word_at_a_time {
const unsigned long one_bits, high_bits;
};
#define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0x01), REPEAT_BYTE(0x80) }
REPEAT_BYTE() je makro (definované v <linux/kernel.h>), které naplňuje slovo kopiemi daného bajtu. Na 32bitovém stroji tedy bude one_bits inicializováno na 0x01010101 a high_bits bude 0x80808080; na 64bitových strojích to bude jen dvakrát tak dlouhé.
has_zero je pak definováno takto:
static inline unsigned long has_zero(unsigned long a, unsigned long *bits,
const struct word_at_a_time *c)
{
unsigned long mask = ((a - c->one_bits) & ~a) & c->high_bits;
*bits = mask;
return mask;
}
Kód dělá to, že odečte jedničku od každého bajtu, zamaskuje všechny bity, které byly nastaveny v původní hodnotě, a pak zamaskuje vše vyjma nejvyššího bitu v každém bajtu. Pokud budeme uvažovat o každém bajtu jako o nezávislé hodnotě, tak nejvyšší bit se pak dá vnímat jako znaménkový bit. Odečtení jedničky od hodnoty způsobí, že se znaménkový bit změní z nuly na jedničku tam, kde hodnota bajtu byla už předtím nulová. Takže tato série operací způsobí, že nejvyšší bit bude nastaven ve všech bajtech, kde předtím byla nula. (Pravdou je, že bajty nejsou nezávislé, a tudíž „zapůjčení“ způsobí odlišné hodnoty za prvním nulovým bajtem, ale zajímá nás jen ten první, takže je to jedno).
Na x86 nedělá prep_zero_mask() nic, takže je odstraněno kompilátorem. To ale není pravda v případě create_zero_mask():
static inline unsigned long create_zero_mask(unsigned long bits)
{
bits = (bits - 1) & ~bits;
return bits >> 7;
}
Odečítání způsobí, že všechny bity až do prvního nastaveného bitu budou mít hodnotu jedna; všechny ostatní bity jsou pak zamaskovány a výsledek je posunut doprava. Pak jsou všechny bajty až do prvního nulového bajtu (v původní hodnotě) nastaveny na 0xff. Teď už jen zbývá zjistit, kolik takových bajtů je. Kód, který toto dělá, není zrovna přímočarý, je to výsledek prosby, kterou Linus zveřejnil na Google+ v březnu. Na 32bitových strojích je find_zero() takovéto:
long a = (0x0ff0001+mask) >> 23; /* Fix the 1 for 00 case */ return a & mask;
Na 64bitových systémech to zase vypadá takto:
return mask*0x0001020304050608ul >> 56;
V obou případech je výsledkem číslo, které je bajtovým offsetem první nuly.
Toto API je relativně nové, poprvé (a jen pro x86) bylo zařazeno ve vývojovém cyklu 3.4. V 3.5 bylo zásadně přepracováno a stalo se lépe použitelným. Pro x86 a powerpc existují specifické implementace (na powerpc se pro zrychlení používá instrukce „spočítej počáteční nuly“); existuje i „obecná“ verze, která funguje správně jen na big-endianu. To ale postačuje na to, aby celá řada architektur mohla tuto schopnost využít. Výsledné úspory v řádu mikrosekund nemusejí vypadat zázračně, ale když se vezmou všechny operace s řetězci, co v jádru jsou, tak se to nasčítá a jde o významné zlepšení.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Vsichni HIGHMEMaci jsou... divni.A co 32bitové Core 2 Duo s 4 GiB RAM?
Core 2 DuoAle houbičky. Jak se jmenuje takový ten notebookový 32bit od Intelu z roku 2006? I když 4 GiB si dokážu představit i u svého Atomu - to je taky 686.
135MB HIGHMEM available. 887MB LOWMEM available. ... CPU: Intel Celeron (Coppermine) stepping 0a
"Hovado! Proč do p*dele používáš i386 na svém nablýskaném x86_64 stroji s tunami gigabajtů RAM. Nabootuj proboha do jádra pro x86_64 a využij plný potenciál. Tvůj i386 userspace na tom bude fungovat dobře. Jsi jako jeden z těch 75letých dědků, co si konečně můžou pořídit Porsche, aby s ním nakonec jeli 10 mil pod povolenou rychlostí a měli za sebou kolonu aut!"Jo, ten člověk mi mluví z duše (a nejde jenom o počítače)