Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.
Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Aktuální předverze je (k 22. 8. 2007) i nadále 2.6.23-rc3; verze 2.6.23-rc4 má v tuto chvíli už trošku zpoždění. Minulý týden do hlavního git repozitáře proudily další opravy.
Aktuální verze -mm stromu je 2.6.23-rc3-mm1. Mezi nedávné změny patří dlouho očekávaný ovladač ath5k (na mac80211 založená podpora pro bezdrátové adaptéry Atheros 5xxx), spousta patchů pro x86_64 a nový patch s jmennými prostory PID.
Aktuální stabilní verze řady 2.6 je 2.6.22.4, vydaná 20. srpna. Obsahuje jediný patch - bezpečnostní opravu signálové zranitelnosti, která za určitých okolností umožňovala poslání libovolného signálu setuid procesu.
Starší jádra: 2.6.20.16 bylo vydáno 16. srpna s pár desítkami oprav. Na další aktualizaci 2.6.20 se teď pracuje; půjde o velkou sadu patchů s pěknou řádkou oprav.
Proč dokáže DOS smazat nekonečný počet souborů, ale rm ne? Protože rm byl napsán v editoru "vi", který způsobuje poškození mozku - a proto se rm ani po 20 letech nedaří dohnat del.
-- Marc Perkel má odpověď pro všechno.
Když říkáš, že jsou to kritici, kdo by měl vyplnit mezery v tvojí nepřesvědčivé argumentaci, tak tím na nikoho dojem neuděláš; arogance tu není nedostatek a ta tvoje není ani originální.
-- Al Viro
Jevgenij Poljakov nepatří mezi vývojáře, kteří by se nechali snadno odradit. Napsal pro jádro spoustu zajímavého kódu - včetně implementace síťových kanálů, systému pro asynchronní šifrování, subsystému kevent, vrstvy pro správu paměti "síťový strom" a kódu netlinkového konektoru. Ze všech těchto patchů se do hlavního jádra dostal pouze netlinkový konektor - a to bylo v roce 2005. Přesto teď Jevgenij představil k posouzení další pořádnou sadu patchů. Ani tentokrát nemíří nějak nízko: chtěl by nahradit většinu funkcí poskytovaných mapovačem zařízení, iSCSI a vrstvami síťových blokových zařízení [network block device (NBD)].
Nový subsystém nazývá distribuované ukládání [distributed storage, DST]. Cílem je umožnit spolehlivé a jednoduché vytváření úložných sítí s vysokým výkonem.
Na nejnižší úrovni implementuje DST jednoduchý síťový protokol, který umožňuje export blokových zařízení po síti. Počet podporovaných operací je velmi nízký: blokové čtení a zápis a požadavek "jak velký je tvůj disk?". Ale účelem je, aby byl rychlý, neblokoval a dokázal fungovat bez kopírování dat. Implementace bez kopírování umožňuje provádět I/O operace bez jakýchkoliv alokací paměti - i když síťový subsystém možná provede nějaké alokace pro sebe.
Zabudováno není ani žádné kontrolování integrity dat; spoléhá se na síťovací kód, že se o tyto věci postará. Stejně tak není podporováno žádné zabezpečení. Je-li blokové zařízení exportováno v rámci DST, je exportováno pro každého, kdo má k danému hostiteli přístup. V budoucnu by určitě šly doplnit exportní seznamy, ale prozatím by hostitelé exportující disky přes DST neměly být přístupné odnikud kromě nejbližší lokální sítě.
Vrchní vrstva kódu DST umožňuje vytváření lokálních disků. Obyčejné ioctl() volání vytvoří lokální disk ze vzdáleného, což je vlastně stejná funkčnost, jakou nabízí NBD. Jevgenij však tvrdí, že výkon je lepší než při použití NBD, protože se používá neblokované zpracovávání, nejsou potřeba žádná uživatelská vlákna a žádné busy-wait smyčky. Jednoduchý mechanismus pro obnovení po pádu znovupřipojí vzdálené hostitele.
Kromě toho však může být kód DST využit k propojení několika zařízení - jak lokálních, tak vzdálených - do větších polí. V současné době jsou dispozici dva algoritmy: lineární a zrcadlový. V lineárním poli je každé zařízení přidáno na konec něčeho, co vypadá jako velké blokové zařízení. Zrcadlový algoritmus replikuje data na každé zařízení, aby poskytl redundanci a obecně rychlejší výkon při čtení. Existuje infrastruktura pro sledování toho, které bloky musí být aktualizovány na každé komponentě zrcadleného pole, takže pokud některé zařízení na chvíli vypadne, může být po naběhnutí zase rychle uvedeno do aktuálního stavu. Zajímavé je, že tyto informace nejsou ukládány na každé komponentě; je to prezentováno jako funkce, která umožní odstranit část zrcadleného pole, již lze pak připojit samostatně coby aktuální obraz pole. Blokové informace v této verzi zatím také nejsou nikde nastálo ukládány, takže pád DST serveru by znamenal, že obnova nekonzistentního zrcadleného pole by byla velmi obtížná, spíše nemožná.
Ukládací pole vytvořená pomocí DST mohou být exportována a použita v jiných polích. Takže série disků umístěných na rychlé lokální síti může být zkombinována ve stromové struktuře do jednoho velkého pole redundantních disků. V tuto chvíli ještě není napsána podpora pro vytváření RAID vyšších úrovní. Podpora více algoritmů je také v TODO, i když Jevgenij se vyjádřil v tom smyslu, že Reed-Solomon kódy používané v tradičních RAIDech nejsou pro distribuovaná pole dostatečně rychlá. Místo toho navrhl použít WEAVER kódy.
DST zatím vypadá jako mapovač zařízení a MD vrstvy, což jsou věci, které už Linux podporuje. Jevgenij však říká, že DST kód je lepší v tom, že všechno zpracovávání provádí neblokovacím způsobem, které funguje s více síťovými protokoly, má automatickou konfiguraci, nekopíruje data a umí operace provádět bez alokací paměti. Nulová alokace je důležitá v situacích, kde hrozí zatuhnutí - a to je při používání vzdálených úložných zařízení často. Aby byl celý DST stack zabezpečen proti zatuhnutí při alokacích paměti, byla by potřeba podpora v síťovací vrstvě. Ale, jak se dalo čekat, Jevgenij má pár nápadů, jak to provést.
Tato sada patchů je zjevně ve velmi raném stadiu; než by bylo možné to použít v produkčním prostředí a s daty, na kterých někomu záleží, bude potřeba ještě dost práce. Podobně jako všechny Jevgenijovy patche, i DST obsahuje množství zajímavých nápadů. Pokud se podaří vyřešit zbývající detaily, mohl by se kód DST nakonec dostat do stavu, kdy by to bylo užitečné doplnění linuxového uložného subsystému.
V jádru většiny síťových ovladačů je metoda hard_start_xmit(), která je volána pro každý přenášený paket. Tato metoda při běžném použití získá potřebné zámky a vloží paket do přenosové fronty adaptéru. Je pravidlem, že se odchozí pakety nehromadí v jádře; když jsou připraveny vyrazit, tak jsou jeden po druhém předány ovladači. Existují však situace, kdy není možné pakety předat okamžitě. Pokud je například přenosová fronta právě plná, podrží paket síťový subsystém, dokud pro něj není místo. Jakmile je ovladač schopen opět pro zařízení přijímat pakety, obnoví se postup "jeden po druhém".
Vývojáři síťového subsystému pořád hledají způsoby, jak z kódu vyždímat trochu lepší výkon. Krišna Kumar se při pohledu na popsané chování zeptal: proč ovladači neposílat seznam nahromaděných paketů v jediném volání? Takové dávkování přenosových operací by mohlo minimalizovat úsilí vynaložené na zamykání a režii přípravy zařízení, takže by byl celý přenos paketů efektivnější. Za tím účelem Krišna poslal několik verzí sady patchů s SKB dávkováním.
Implementace SKB dávkování vyžaduje pár změn ovladačového API - ale jsou malé a potřebují je pouze ovladače s podporou dávkování. Prvním krokem je nastavení bitu NETIF_F_BATCH_SKBS v poli features struktury net_device. Příznak řekne síťovému stacku, že ovladač umí dávkové přenosy.
Prototyp hard_start_xmit() vypadá takto:
int (*hard_start_xmit)(struct sk_buff *skb, struct net_device *dev);
Tento prototyp se nemění, ale ovladač, který dal najevo, že pro dev akceptuje dávkování, může narazit na to, že bude jeho metoda hard_start_xmit() volána s skb nastaveným na NULL. Hodnota NULL značí, že je k přenosu připravena dávka paketů; ta se nachází v (novém) seznamu dev->skb_blist. Takže (velmi zjednodušená) podoba funkce hard_start_xmit() u ovladače, který umí dávkování, bude vypadat asi takto:
driver_specific_locking_and_setup(); if (skb) ret = send_a_packet(internal_dev, skb); else { while ((skb = __skb_dequeue(dev->skb_blist)) != NULL) { ret = send_a_packet(internal_dev, skb); if (ret) break; } } driver_specific_cleanup();
V reálu to může být trochu komplikovanější - zvláště pokud ovladač implementuje optimalizace jako například potlačování přerušení o dokončení, dokud nebyl odeslán poslední paket dávky. Ale jádro změny je tu popsáno - moc toho není.
V tuto chvíli se vývojáři stále snaží určit, jaký výkonnostní dopad by patch měl. Zvláště je zajímá, jak si dávkování vede ve srovnání s TCP segmentation offloading, což je v podstatě také mechanismus pro dávkování přenosu. U patche tohoto druhu budu velmi záležet na výkonnostních testech; pokud budou výsledky dobré, bude patch pravděpodobně začleněn.
Následující obsah je © KernelTrap
21. srp, originál
Nedávné hlášení o chybě vedlo k debatě o případném ukončení podpory verzí GCC starších než 4.0. Adrian Bunk poznamenal: V současné době podporujeme 6 různých stabilních řad gcc a možná už přišel čas uvažovat o tom, že přestaneme podporovat ty starší. Potřebují ještě nějaké architektury gcc < 4.0? Russell King připomněl, že na některých architekturách je GCC 3.x stále vhodnější než 4.x: Rád bych v dohledné budoucnosti udržel podporu pro gcc 3.4.3 na ARM. Z mého pohledu jsou verze 4.x pro ARM vývojovou záležitostí. 3.4.3 je také rychlejší a o dost méně ukecaná než gcc 4.
Na otázku, kolik vývojářů jádra stále ještě používá starší verze, Linus Torvalds odpověděl, že na tom nezáleží: NEJDE tu o 'vývojáře jádra'. Jde o libovolné lidi, kteří jádra testují. Když jim to ztížíme, proděláme na tom. Takže ne, já hlasuji pro zachování podpory starých verzí gcc, pokud by nešlo o něco naprosto fatálního.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Jevgenij Poljakov z vývojářů, kteří by se nechali snadno odradit.V téhle větě pravděpodobně chybí sloveso.
(Prosím, abyste na můj OT příspěvek nereagovali.)Když jsi položil otázku, dostaneš odpověď. Pokud jsi tak toužil po tom, aby ti nikdo neodpovídal, neměl ses ptát. Ano, je to nutné.
Prosím, je opravdu nutné psát informace o překlepech do diskuze? Nebylo by vhodnější kontaktovat autora e-mailem? Vždyť takový příspěvek v diskuzi nemá žádného smyslu.A je opravdu nutné, aby se takovýhle příspěvek (jako ten váš) objevil pod každým druhým článkem? Vždy s jediným argumentem – "mne to nezajímá".
Prosím, abyste na můj OT příspěvek nereagovali.Příspěvek týkající se komentovaného článku vám vadí, a sám napíšete příspěvek, který se článku netýká vůbec? To mi připadá přinejmenším podivné.
vi
, ale kvůli tomu, že je hluboce pomýlený.
vi
, ta mi nevadí. Vadí mi část o rm
a zpracování příkazové řádky, protože ta svědčí o tom, že autor toho příspěvku kritizuje něco, čemu nerozumí, jen proto, že tomu nerozumí.
Jak vidno z té diskuse, není to chyba principu, ale implementace… Mimochodem, než někdo začne tvrdit, že v současných Linuxech je problém smazat přes wildcard 10000 souborů, měl by si aspoň zkusit
mkdir x ; cd x touch {0..9}{0..9}{0..9}{0..9} rm * && echo OK
aby zjistil, že měl tu konstantu zvolit větší…
touch abcdefgh{0..9}{0..9}{0..9}{0..9}
$ touch abcdefgh{0..9}{0..9}{0..9}{0..9} $ rm abcdefgh* $ echo $? 0 $nemalo to byt este o nieco dlhsie?
$ touch abcdefgh{0..9}{0..9}{0..9}{0..9} -bash: /usr/bin/touch: Argument list too long $ getconf ARG_MAX 131072
$ touch abcdefgh{0..9}{0..9}{0..9}{0..9} $ touch abcdefghi{0..9}{0..9}{0..9}{0..9} zsh: argument list too long: touch $ getconf ARG_MAX 131072 $zazrak!
$ touch abcdefgh{0..9}{0..9}{0..9}{0..9} bash: /usr/bin/touch: Argument list too long
\0
do dĺžky reťazca ? char *
' už třeba ne…
char* argv[]
' v paměti uloženo.
nemyslim si, ze sa tam musia zmestit pointery, argv je obycajne pole pointerov na char* a da sa teda velmi jenoducho dopocitat z jedineho pointeru na samotny blok pamate (o velkosti ARG_MAX)
To by mne zajímalo jak. Musel byste dát nějaký horní limit na velikost jednoho parametru a jednotlivé řetězce ukládat s příslušným odstupem. Pokud by byl ten limit dostatečně velký, aby neomezoval reálnou použitelnost systému, byl by takový způsob uložení ještě výrazně neefektivnější než ten, který se skutečně používá (samostatné pole pointerů).
A také by mne zajímalo, jak byste bez toho pole pointerů chtěl zajistit, že bude fungovat klasické
while (argc > 0) { ... argc--; argv++; }
argv++
. Vzhledem k tomu, jak funguje pointerová aritmetika, tam to pole pointerů prostě mít musíte.
char* argv[]
' a jak se pak vyhodnocuje 'argv[n]
'.
argv[2]
': je to pointer, který najdete o 2*sizeof(char*)
dál, než začíná pole. Navíc i kdybyste nějakým zvráceným způsobem zařídil, že to bude fungovat, znamenalo by to, že časová náročnost vyhodnocení argv[n]
bude záviset na velikosti toho pole.
$ getconf ARG_MAX 131072 $ more config.sys shell=c:\dos\command.com /p /e:3000Same shit.
Alternatively, this software may be distributed under the terms of the GNU General Public License ("GPL") version 2 as published by the Free Software Foundation.
Takze ten GPL kod ako vravis nebol zobraty a nebola tam prepisana len cast o licencii...Nevím, zda rozumím správně (může to být mojí špatnou slovenštinou), ale GPL kód skončil v CVS BSD pod BSD licencí bez souhlasu autorů.
Co sa tyka Jiriho Slabeho, tak upravoval subory, ktore neboli licencovane dualne, ale len pod BSD licenciou a on si surovo dovolil odtranit licenciu a pridat GPL, to sa mi zda ako drzost.Ano. Drzost - nebo přehlédnutí, dle mého pravděpodobnější. Důvod jsem zmínil. To může ale zřejmě objasnit jen autor.