Pēc divu mēnešu izstrādes Linuss Torvalds prezentēja Linux 6.18 kodola izlaidumu. Starp ievērojamākajiem uzlabojumiem ir: dm-pcache diska kešatmiņas izmantošanai ilgstošā atmiņā (PMEM), Bcachefs noņemšana, XFS tiešsaistes pārbaudes režīms, Binder (Android IPC) un Tyr (GPU Mali) draiveri uz Rust, iespēja izveidot USB draiverus uz Rust, SLUB atmiņas allocator kešatmiņas optimizācija, adresēšana nosaukumu telpās ar failu identifikatoriem, swap darbības paātrināšana, BPF programmu verifikācija ar digitālo parakstu, Intel CET virtualizācija KVM, PSP tīkla protokols (hibrīds TLS un IPsec), AccECN IP paplašinājuma atbalsts, UDP steka optimizācija.
Jaunajā versijā ir 15035 labojumu no 2217 izstrādātājiem, plāksnes izmērs ir 45 MB (izmaiņas skāra 13142 failus, pievienota 601897 koda rindiņa, noņemts 355006 rindiņas). Iepriekšējā laidienā bija 14334 labojumu no 2118 izstrādātājiem, plāksnes izmērs bija 46 MB. Aptuveni 40% no visiem 6.18 izmaiņām ir saistītas ar ierīču draiveriem, aptuveni 16% izmaiņu ir saistītas ar kodu atjaunināšanu, kas specifiska aparatūras arhitektūrām, 12% ir saistītas ar tīkla steku, 5% ar failu sistēmām un 3% ar iekšējām kodola subsistēmām.
Galvenās jaunās funkcijas kodolā 6.18 (1, 2, 3):
- Disku apakšsistēma, I/O un failu sistēmas
- Device Mapper ir pievienots dm-pcache apstrādātājs, kas izmanto pastāvīgo atmiņu (CXL atmiņa, adresēta caur DAX ierīci) kā papildu augstas veiktspējas kešu pirms lēnākām tradicionālajām diska vai zibatmiņas ierīcēm. Dm-pcache nodrošina keša satura saglabāšanu avārijas gadījumā (crash-safe), izmantojot ilgstošu atmiņu, metadatu dublēšanu un datu un metadatu integritātes pārbaudi, izmantojot CRC32 kontrolsummas. Patlaban tiek atbalstīta tikai kešatmiņas izmantošana atpakaļrakstīšanas režīmā (write-back).
- No kodola ir noņemts Bcachefs failu sistēmas kods, kas tagad tiks izplatīts kā ārējs modulis, ko var izveidot, izmantojot DKMS (Dinamiskā kodola moduļu atbalsts) rīku komplektu. Bcachefs kods var tikt atgriezts kodolā pēc tam, kad Kents Overstrīts patiesi pierādīs iespēju pareizi sadarboties ar citiem kodola izstrādātājiem un spēju ievērot izstrādes regulu.
- Izsistēmiskajā izsaukumā pwritev2() pievienots karogs RWF_NOSIGNAL, kas atslēdz SIGPIPE signāla sūtīšanu, rakstot izsistajos neizsakāmajos kanālos vai soketos.
- Procfs pievienota montēšanas opcija «pidns» PID nosaukumu telpu norādīšanai. Piemēram: «mount -t proc -o pidns=\/proc\/self\/ns\/pid proc \/tmp\/proc».
- XFS atzīta par stabilu un pēc noklusējuma iekļauta iespēja izmantot fsck utilītu problēmu pārbaudei un labojumam tiešsaistes režīmā, nepārmontējot failu sistēmu. Pievienoti sistēmiskie izsaukumi file_getattr un file_setattr, lai mainītu īpašo failu (jebkura inode) atribūtu. KConfig pēc noklusējuma atspējotas XFS_SUPPORT_V4 (4. versija XFS) un XFS_SUPPORT_ASCII_CI (ASCII simbolu neatkarīgā režīma) opcijas, kas ir atzītas par novecojušām. Noņemti novecojušie montēšanas iestatījumi attr2, noattr2, ikeep un noikeep.
- MD RAID ieviests jauns bitu kartes tips — llbitmap (bezbloķētā bitu karte), kas darbojas bez bloķēšanas un nodrošina augstāku veiktspēju.
- No kopējās «inode» struktūras izņemta ar šifrēšanu un verifikāciju saistītā informācija (i_crypt_info un i_verity_info rādītāji). Šīs izmaiņas ļauj samazināt atmiņas patēriņu failu sistēmās, kas neatbalsta šifrēšanu un verifikāciju.
- FUSE apakšsistēmā pievienota atbalsts sistēmiskajam izsaukumam copy_file_range() un tiešai diapazonu kopēšanai, izmantojot 64 bitu lielumu (iepriekš tika atbalstīts tikai 32 bitu lielums). Pievienots atbalsts inicializēšanai sinhronajā režīmā montēšanas laikā (FUSE_DEV_IOC_SYNC_INIT).
- ext4 FS īstenota 32 bitu lietotāju (uid) un grupu (gid) identifikatoru izmantošana piekļuvei rezervētajiem blokiem. Pievienoti ioctl operācijas superbloka parametru iestatīšanai un lasīšanai montētajās FS (tune2fs varēs mainīt parametrus superblākā bez rakstīšanas tiesībām bloku ierīcē). Pilnībā noņemti novecojušie iestatījumi, kas specifiski ext3.
- F2FS pievienota montēšanas izvēle «lookup_mode», kas ļauj izvēlēties meklēšanas režīmu: perf — meklēšana pēc hashes, compat — lineāra meklēšana, auto — automātiska izvēle. Režīma maiņa ir jēgpilna konfigurācijām ar direktorijām, kurās netiek ņemts vērā simbolu reģistrs. Pašreizējo meklēšanas režīmu var noskaidrot, skatoties failu «/sys/fs/f2fs//effective_lookup_mode». Pievienota inode rezervēšanas iespēja, kas pieejama tikai privilēģētiem lietotājiem.
- Overlayfs pievienots režīms, kas ignorē simbolu reģistru, kas tiek ieslēgts failu sistēmas slāņu līmenī (izvēles maiņa atsevišķiem direktorijām pašlaik netiek atbalstīta).
- BTRFS uzlabots paralēlo operāciju izpilde pie augsta lasīšanas slodzes un zemā rakstīšanas slodzes, samazināts transakciju apstiprināšanas laiks, ievērojami samazināts sinhronizācijas laiks (no minūtēm līdz desmitiem sekundžu). Nodrošināta iespēja izmantot blokiem (bs), kuru izmērs ir lielāks par atmiņas lapu (ps).
- Ksmbd (kas darbojas uz SMB servera kodola līmenī) pievienots parametrs, lai ierobežotu maksimālo savienojumu skaitu no viena. IP adreses. Smbdirect, smbclient un smbserver pārveidoti, lai izmantotu standartizētas kodola struktūras.
- SQUASHFS pievienota iespēja izmantot sistēmas izsaukumā lseek() opcijas SEEK_DATA un SEEK_HOLE, lai meklētu datus un tukšumus retiem failiem. Dažos testos fiksēta kopēšanas efektivitātes palielināšanās līdz 150 reizēm.
- EXFAT pievienota atbalsts ioctl FS_IOC_GETFSLABEL un FS_IOC_SETFSLABEL, kas ļauj lasīt un rakstīt sadaļu etiķetes. Nodrošināta montēšanas opciju maiņa remounting laikā. Paātrināta bitu karšu ielāde.
- NTFS3 pievienots atbalsts ioctl FS_IOC_GETFSLABEL un FS_IOC_SETFSLABEL, kas ļauj lasīt un iestatīt sadaļu etiķetes.
- Atmiņa un sistēmas pakalpojumi
- Iekļauta interprocessāli mijiedarbības mehānisma Binder īstenošana, kas uzrakstīta Rust valodā. Binder tiek izmantots Android, lai organizētu mijiedarbību starp procesiem un attālinātu metožu izsaukšanu (viens Android process var izsaukt metodi vai funkciju citā Android procesā, izmantojot Binder, lai identificētu, izsauktu un pārsūtītu argumentus starp procesiem). Binder kods tika pārrakstīts Rust valodā Google iniciatīvas ietvaros, lai uzlabotu Android drošību.
- SLUB, kodolaika allocator, ir īstenots izvēles kešatmiņas slānis «sheaves», kas izmanto vairākus kešus, no kuriem katrs ir piesaistīts atsevišķam CPU kodolam, ļaujot vienam kodolam lokalizēt operācijas atmiņas piešķiršanā vai atbrīvošanā. Šāda kešatmiņa uzlaboja atmiņas piešķiršanas un atbrīvošanas veiktspēju kodolā, pateicoties lieko sinhronizācijas primitīvu novēršanai, kas bija nepieciešami, iesaistot dažādus CPU kodolus. Veiktajos testos veiktspējas pieaugums bija no 6.3% līdz 31% atkarībā no slodzes veida.
- Papildināta iespēja izveidot failu aprakstītājus, kas saistīti ar noteiktu nosaukumu telpu (namespace). Atšķirībā no piekļuves nosaukumu telpām, izmantojot identifikatorus (/proc//ns/), failu aprakstītājs ir saistīts ar konkrētu nosaukuma telpas eksemplāru un novērš situāciju, kad identifikators tiek atkārtoti piešķirts un norāda uz citu objektu. Līdzīgi kā ar pidfd izmantošanu, failu aprakstītāju atvēršana, kas atsaucas uz nosaukumu telpām, tiek veikta, izmantojot funkcijas open_by_handle_at() un name_to_handle_at().
- Ieviešs mehānisms «Swap Table», kas paaugstina lapošanas veiktspēju. Paātrinājums tiek panākts, samazinot konkurenci piekļuvei lapošanas kešatmiņai, efektīvāku meklēšanu kešatmiņā un fragmentācijas samazināšanu. Swap Table bāzes aizmugure tiek izmantota lapošanas kešēšanai vietā XArray aizmugures un vidēji ļāva paaugstināt veiktspēju par 5-20%. Testā usemem caurlaides spēja pieauga par 17-28%, testā par daudzthreads pārbaudi kodolu laika ilgs samazinājās par 1.12-3.19%, testā redis-benchmark ar BGSAVE tika novērots apstrādāto pieprasījumu skaita palielinājums par 6-7%.
- Zswap apakšsistēma ir pārgājusi uz tiešu zsmalloc atmiņas piešķiršanas sistēmas izmantošanu vietā zpool slāņa, kas vairs netiek izmantots un tagad ir izņemts no kodola.
- Lai pārvaldītu mikrokoda ielādētāja uzvedību x86 sistēmās, ir ieviesta komandu opcija «microcode=flag saraksts». Šobrīd jaunā opcija aizstāj «microcode.force_minrev» un arī ļauj noteikt minimāli pieļaujamo mikrokoda versiju ielādei.
- Sākusies pārstrukturēšana pārmērīgi uzpūstai ‘page’ struktūrai, ko izmanto operatīvās atmiņas lapu pārvaldībai. Pievienots tips ‘memdesc_flags_t’ univerzālajiem karogiem, kas var tikt izmantoti pēc tam, kad nākotnē no ‘page’ struktūras tiks izdalītas atsevišķas struktūras slab un folijiem (folio).
- Nios2 arhitektūrai, kas tiek izmantota Altera Nios II mikroprocesoros (FPGA bāzes mīkstais mikroprocesors), ieviesta atbalsts sistēmas izsaukumam clone3().
- Kern config (KConfig) pievienota atribūta ‘transitional’, ko var izmantot, lai atzīmētu iestatījumus, kas netiek attēloti lietotāja interfeisos, piemēram, ‘make menuconfig’, un netiek iekļauti ģenerētajos konfigurācijas failos. Atribūta galvenais mērķis ir atvieglot opciju pārnosīšanu saglabājot atpakaļ saderību.
- Minimālā varētu tikt izmantota Clang kompilatora versija, kas var saprast kodu, ir paaugstināta līdz LLVM 15 rīku komplektam. Debian 12 un Ubuntu 22.04 piegādā LLVM 14.
- Turpināts izmaiņu pārsūtīšana no Rust-for-Linux zara, kas saistīta ar Rust izmantošanu kā otro valodu draiveru un kodolu moduļu izstrādē (Rust atbalsts pēc noklusējuma netiek aktivizēts, tāpēc Rust nav obligātas atkarības no kodola būvniecības). Jaunajā versijā kodam uz Rust ir ieviesti atomiskie operācijas ar atmiņu, maple tree struktūra, iespēja izveidot DebugFS failus un funkcijas bitu kartes manipulācijai. Paplašināts API pieejamība draiveru izstrādei. Piedāvāts pilns USB ierīču draiveru izstrādes abstrakciju komplekts (USB draivera piemērs). Perf rīkā pievienots atbalsts no rustc kompilatora ģenerētiem atkļūdošanas simboliem.
- Virtualizācija un drošība
- Pievienots atbalsts kriptogrāfiskajai verifikācijai augšupielādētajiem BPF programmām pēc digitālās paraksts. Turpmāk šī iespēja tiks paplašināta ar līdzekļiem, lai noteiktu noteikumus, kādas parakstītas BPF programmas var augšupielādēt, un sniegt nepieredzējušiem lietotājiem iespēju izmantot verificētās BPF programmas.
- KVM hipervizorā ir ieviesta atbalsts Intel CET (Control-flow Enforcement Technology) virtualizācijai, kas tiek izmantota, lai aizsargātu pret ekspluatācijas metodēm, kas izmanto atgriezeniski orientētu programmēšanu (ROP — Return-Oriented Programming). Aizsardzības jēga ir tāda, ka pēc pārvaldības nodošanas funkcijai atgriešanās adrese tiek saglabāta procesorā ne tikai parastajā stekā, bet arī atsevišķā ēnu stekā, kuru nevar tieši mainīt.
- Pievienota iespēja izmantot vairāk nekā 255 CPU viesu sistēmās, kas darbojas Bhyve hipervizora vadībā FreeBSD 15 hostos.
- Pievienota dibs (Direct Internal Buffer Sharing) pakāpe, lai pārvaldītu koplietojamību buferos izolētā vidē, piemēram, hipervizorā vai Linux kodola instancē.
- Audita apakšsistēmā ir pievienots atbalsts darbam ar vairākiem vienlaicīgi ieslēgtiem LSM (Linux Security Module) moduliem.
- Pievienots virtio draiveris spi-virtio piekļuvei SPI ierīcei (Serial Peripheral Interface) no virtuālo mašīnu.
- KVM hipervizorā ir pievienots SEV-SNP CipherText Hiding režīma atbalsts, kas bloķē šifrēta atmiņas lasīšanu no aizsargātām viesu sistēmām neautorizētā CPU.
- Pievienots qtee draiveris TEE vidi (Trusted Execution Environment) Qualcomm mikroshēžām.
- Tīkla subsistēma
- Pievienots TCP savienojumu šifrēšanas atbalsts, izmantojot PSP (PSP Security Protocol), ko izstrādājusi Google, lai šifrētu datu plūsmu starp datu centriem. PSP nodrošina šifrēšanu, kriptogrāfisko integritātes kontroli un avota autentifikāciju, realizējot savdabīgu protokolu TLS un IPsec iespēju kombināciju. PSP tiek izmantota atsevišķa šifrēšana atsevišķiem tīkla savienojumiem, nevis visam sakaru kanālam. PSP izmanto atsevišķus šifrēšanas atslēgas dažādiem tunelētiem TCP savienojumiem, nodrošinot stingru plūsmu izolāciju no dažādām lietojumprogrammām un apstrādātājiem. Lai samazinātu slodzi uz CPU, tiek atbalstīta šifrēšanas un atšifrēšanas operāciju iznešana uz tīkla kartēm (offload). Datu pārsūtīšanai tiek izmantots UDP protokols, virs kura tiek pārraidīta oriģinālā TCP paketa saturu.

- Pievienota primārā atbalsta funkcionalitāte AccECN (Precīza Izteikta Sastrēguma Paziņošana), kas ir uzlabota ECN paplašinājuma versija, ļaujot hostiem sastrēguma gadījumā marķēt IP paketes, nevis tās noraidīt, tādējādi ļaujot noteikt sākuma sastrēguma fāzi sakaru kanālos bez paketes zuduma. Sākotnējā ECN paplašinājuma ierobežojums atļauj izsniegt tikai vienu sastrēguma signālu vienā TCP pieņemšanas-nodošanas ciklā (RTT, Round-Trip Time, pieprasījuma nosūtīšana un atbildes saņemšana). AccECN novērš šo ierobežojumu un ļauj saņēmējam nodot sūtītājam vairākas sastrēguma atzīmes TCP paketes galvenē. Sastrēguma kontroles algoritmi var izmantot iegūto informāciju, lai precīzāk reaģētu uz sastrēgumiem un neizmantotu strauju nosūtīšanas intensitātes samazināšanu, ja rodas nelieli sastrēgumi.
- UDP steka ietvaros ir optimizēta iebraucošo paketi apstrāde DDoS uzbrukumu apstākļos, kas noved pie liela skaita paketi ienākšanas vienā vai vairākos UDP soketos. Veiktie uzlabojumi, piemēram, konkurējošo bloķēšanas samazināšana, datu struktūru izvietojuma optimizēšana atmiņā un NUMA (Neviendabīgas Atmiņas Piekļuves) arhitektūrai atbilstošo bloķēšanu izmantošana, ir ļāvuši palielināt veiktspēju UDP paketu pieņemšanā par 47% un vairāk ekstremālos apstākļos.
- Ieviesta iespēja atslēgt I/O kešēšanu NFS serverī, ļaujot izmantot NFS serveri sistēmās ar nelielu atmiņas apjomu (piemēram, ierobežotās mākoņa vidēs). Keša atslēgšana var būt noderīga arī noslogotā NFS serverī, lai novērstu atmiņas izsistīšanu datus, kas saistīti ar lokālajiem krātuvēm, atbrīvojot atmiņu NFS kešam.
- Maksimālais ienākošo un izejošo paketi buferu izmērs tīkla soketos (net.core.rmem_max un net.core.wmem_max) ir palielināts no 2 MB līdz 4 MB. Noklusējuma noteiktais izmērs ir palicis nemainīgs (net.core.rmem_default un net.core.wmem_default = 2 MB).
- Pievienots draiveris Qualcomm PPE (Paku Apstrādes Dzinējam), kas paātrina tīkla operācijas, kas tiek izmantots Qualcomm SoC IPQ9574.
- Pievienots TCP savienojumu šifrēšanas atbalsts, izmantojot PSP (PSP Security Protocol), ko izstrādājusi Google, lai šifrētu datu plūsmu starp datu centriem. PSP nodrošina šifrēšanu, kriptogrāfisko integritātes kontroli un avota autentifikāciju, realizējot savdabīgu protokolu TLS un IPsec iespēju kombināciju. PSP tiek izmantota atsevišķa šifrēšana atsevišķiem tīkla savienojumiem, nevis visam sakaru kanālam. PSP izmanto atsevišķus šifrēšanas atslēgas dažādiem tunelētiem TCP savienojumiem, nodrošinot stingru plūsmu izolāciju no dažādām lietojumprogrammām un apstrādātājiem. Lai samazinātu slodzi uz CPU, tiek atbalstīta šifrēšanas un atšifrēšanas operāciju iznešana uz tīkla kartēm (offload). Datu pārsūtīšanai tiek izmantots UDP protokols, virs kura tiek pārraidīta oriģinālā TCP paketa saturu.
- Aprīkojums
- Kernā tika pieņemts draiveris Tyr, kas uzrakstīts Rust valodā un nodrošina saskari ar GPU ARM Mali, kuros tiek izmantota tehnoloģija CSF (Saskaru plūsmu priekšnieks), piemēram, Mali G310, G510 un G710. Draiveris šobrīd nav gatavs ikdienas lietošanai parastajiem lietotājiem un tiek uzskatīts par eksperimentālu prototipu draiveru izstrādes abstrakciju testēšanai Rust valodā.
- Ievades ierīču draiveriem ar HID (Cilvēka saskares ierīce) interfeisu pievienota atbalsts skārienpaliktņiem ar Taustāmo atgriezenisko saiti un spiediena sensoriem.
- Turpināta darba virzība pie drm-draivera (Tiešā renderēšanas pārvaldnieks) Xe GPU, kas balstīti uz Intel Xe arhitektūras, kas tiek izmantota Intel Arc grafiskajā kartē un integrētā grafikā, sākot ar Tiger Lake procesoriem. Jaunajā versijā ir pievienota madvise saskarne, iekļauta SR-IOV PF (Single Root I/O Virtualization Physical Function) atbalsts, pievienota Intel PSMI režīma atbalsts aparatūras validācijai, nodrošināta veiksmīga pārraidīto datu par kļūdām apstrāde, izstrādāts SLPC enerģijas patēriņa profils, pievienots atbalsts papildu mikrokodam (piemēram, dzesētāja kontrollerim un sprieguma regulatoram) draivera pārbaudes laikā.
- AMDGPU draiverī pievienots atbalsts Cyan Skillfish APU ierīcēm, uzlabots AMD GCN 1.0 atbalsts, nodrošināta saderība ar criu instrumentu, sysfs pievienotas temperatūras metrikas, atļauti MMIO pārkārtošanas pieprasījumi no lietotāja telpas.
- i915 draiverī iekļauts atbalsts Wildcat Lake sērijas mikroshēmām un uzlabota Jasper Lake, Elkhart Lake, Gen7 un Gen6 GPU darbība.
- Nouveau draiverī pēc noklusējuma tiek izmantoti GSP NVIDIA mikrokodi un uzlabota kļūdu apstrāde.
- Turpināta Nova draivera komponentu integrācija NVIDIA GPU, kas aprīkoti ar GSP mikrokodiem, izmantošanu, sākot no NVIDIA GeForce RTX 2000 sērijas, pamatojoties uz Turing mikroarhitektūru. Draiveris uzrakstīts Rust valodā. Jaunajā versijā paplašināts GSP mikrokodu atbalsts, uzlabota makro «register!» realizācija, pievienots PCI ierīču klasēm un ražotāju ID atbalsts.
- Pievienots rocket draiveris NPU paātrinātājiem, ko izmanto Rockchip RK3588 SoC.
- Pievienots kodola parametrs «boot_display» izejas ierīces izvēlei, lai parādītu ielādēšanas procesu sistēmās ar vairākiem GPU.
- vesadrm draiverī ieviesta atbalsts 8-bit paletei.
- Msm draiverī ir pievienota GPU Adreno 663 atbalsts, kā arī īstenota IFPC (Inter Frame Power Collapse) tehnoloģijas enerģijas patēriņa samazināšanai.
- Panthor draiverī ir pievienota GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 un Mali-Gx25 atbalsts.
- Pievienots ASoC Qualcomm Glymur un PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 un TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825 audio sistēmu atbalsts. Pievienots Tascam US-144mkII un Presonus S1824c USB audio kartēm atbalsts.
- Pievienots ARM CPU Cortex-A320/A520AE/A720AE un C1-Nano/Pro/Premium/Ultra atbalsts.
- Pievienots ARM platformu, SoC un ierīču atbalsts: Apple M2 Pro, M2 Max un M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H un RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.
Bez tam, Latīņamerikas Brīvā Programmatūras Fonds ir izstrādājis pilnīgi brīvu Linux-libre 6.18 kodolu, kas attīrīts no elementiem, kas satur nesvaigas sastāvdaļas vai koda daļas, kuru lietojums ir ierobežots ar ražotāju. 6.18 laidienā ir atjaunināts kods blobu attīrīšanai Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP un Marvell WiFi-Ex draiveros. Vārdu attīrīšana blobu nosaukumiem dts failos (devicetree) Qualcomm, Mediatek un TI ARM64 čipiem ir veikta. Jaunajos FourSemi fs2104/5s, TI TAS2783 un Qualcomm GENI draiveros ir neitralizēta blobu ielāde.
Avots: opennet.lv

