programmatūra · 6 min · 02.09.2026

Paint.NET startē uz Linux ar 180 000 rindu Direct2D aizstājēju, ko trīs nedēļās uzrakstīja Claude

Paint.NET 5.2 alfa būvējums 9739 pirmo reizi startē uz Linux. Aiz tā stāv 180 000 koda rindu, kas programmas iekšienē atkārto Microsoft Direct2D grafikas saskarni. Šo kodu trīs nedēļās uzrakstīja Claude, strādājot ar Paint.NET autoru Riku Brūsteru.

Paint.NET pastāv kopš 2004. gada un visu šo laiku darbojas tikai uz Windows. Mēģinājumi to palaist zem Wine ilgst aptuveni 12 gadus, kā atgādina Neowin. Katrs no tiem apstājās vienā vietā: Wine Direct2D īstenojums ir pārāk nepilnīgs, lai programma uzzīmētu pat savu logu.

kāpēc Direct2D bija strupceļš

Direct2D ir Microsoft 2D grafikas API. Paint.NET to izmanto gan saskarnes, gan attēla zīmēšanai. Wine bibliotēka d2d1.dll šo API sedz tikai daļēji. Repozitorijs Paint.NETOnWine, kur brīvprātīgie kopo ielāpus Wine, stāvokli apraksta pa versijām: 4.3.12 startē, taču lielākā daļa rīku avarē un attēlojums mirgo. 5.1.x sērija daļu elementu zīmē kā melnus taisnstūrus. 5.2.x avarē uzreiz pēc palaišanas. Repozitorijā ir 16 atvērtu problēmu un 153 iesūtījumi.

Direct2D atslēgt nevar. Paint.NET tam nodod praktiski visu, ko rāda ekrānā: slāņus, izlases apmales, tekstu, kā arī iebūvētos efektus ar to konvolūcijas kodoliem. Ja saskarne atbild ar kļūdu, programma nesāk darbu.

Brūsters nolēma Wine nesagaidīt. Paint.NET tagad nes savu Direct2D īstenojumu pārvaldītā kodā, failā PaintDotNet.Windows.Direct2D1.Managed.dll. To ieslēdz komandrindas parametrs /wine, kas vienlaikus atslēdz trīs Windows komponentes: UIAnimation, Composition un Windows 11 DisplayInformation variantu.

kā tapa kods

Brūsters gaitu apraksta foruma ierakstā bez izskaistinājumiem. Claude rakstīja testus, salīdzināja attēlojuma rezultātu ar īsto Direct2D un pats izrēķināja formulas Direct2D iebūvētajai efektu bibliotēkai. Disasemblēt d2d1.dll nevajadzēja nevienā solī, izņemot vienu: lai noskaidrotu, vai kāda funkcija ir publiska vai iekšēja.

Uzraudzība bija vajadzīga. Kādu laiku modelis neizsauca COM atsauču skaitītāja AddRef() ekvivalentu, tāpēc objekti netika pareizi atbrīvoti. Dažas arhitektūras izvēles Brūsters lika pārstrādāt. Darbā gāja trīs modeļi: Fable, Opus un Sonnet.

Es nekādi nevaru pārskatīt 180 000 koda rindu, tas ir pārāk, pārāk, pārāk daudz. Pārējais Paint.NET ir aptuveni 700 000 rindu un pie tā es strādāju vairāk nekā 20 gadus.

Šo daļu Brūsters sauc par vibe coded kodu, kas nav rūpīgi pārskatīts. Visas izmaiņas pārējā Paint.NET pusē, tostarp integrācijas punktus, viņš pārbaudīja pats. Viņš cer, ka laika gaitā vairāk šī koda pārskatīs cilvēki.

Foruma ierakstā Brūsters uzreiz nosprauž robežu diskusijai par AI rakstītu kodu. Viņš raksta, ka nemēģinās nevienu pārliecināt un ka strīdiem par to šajā pavedienā nav vietas, jo neviens šo būvējumu lietot nav spiests. Paint.NET pamatkods paliek slēgts, tāpēc arī jaunā Direct2D daļa nav publiski apskatāma.

ko vajag, lai palaistu

  • Portablo versiju. Instalators nestrādā.
  • Wine 11.14 vai jaunāku.
  • Reģistra ierakstu, kas neļauj Wine aizstāt d3dcompiler_47 ar savu variantu: wine reg add "HKCUSoftwareWineDllOverrides" /v d3dcompiler_47 /d native /f
  • Uzstādītu DXVK.
  • Palaišanu ar parametru /wine.

Paint.NET moderators toe_head2001 tajā pašā pavedienā piebilst, ka DXVK un reģistra ierakstu var nokārtot ar vienu komandu: winetricks d3dcompiler_47 dxvk. Jaunākajam DXVK vajag Vulkan 1.4, kas Mesa draiveros ienāca 25.x sērijā. Vecākai aparatūrai der DXVK 2.7.1, kam pietiek ar Vulkan 1.3.

cik tālu tas strādā

Brūstera pašvērtējums ir tiešs: programma ne-nestrādā. Tā ir lēna, brīžiem ļoti lēna. Stabila tā nav. Wine joprojām ir tukši caurumi komponentēs, ko Paint.NET prasa, piemēram, WIC metadatu apstrādē. Tas pats attiecas uz user32 un comctl32. Grafika, kad tas mainīsies, nav.

Pirmo veiksmīgo startu viņš panāca uz .NET 10 win-x64 ar Wine 11.14-dev, Ubuntu, WSL2 un Windows 11. Tajā pašā dienā Discord servera dalībnieki programmu palaida uz īstām Linux sistēmām. Brūsters piebilst, ka pats Linux nelieto un ka atbalsts pagaidām ir tikai eksperiments bez grafika.

Viņa aprēķins: tagad, kad programma vispār startē, atlikušos Wine trūkumus var risināt Wine pusē. Daļu lietu būs lētāk apiet pašā Paint.NET, kā jau izdarīts ar UIAnimation. Pirmo repozitoriju ielāpiem Wine pērn izveidoja lietotājs ar segvārdu Blue Beard. No turienes izauga Paint.NET Discord kanāls, kurā šis darbs sākās.

Ikdienas darbam uz Linux joprojām der GIMP, Krita vai Pinta, kas atkārto Paint.NET saskarni. Jaunums šeit ir tehnisks. Wine izstrādātājiem tagad ir sarežģīts .NET lietojums, kas startē ar apietu Direct2D, tāpēc kļūdu pieteikumi pienāk par WIC metadatiem un logrīku bibliotēkām. Direct2D vairs neaizsedz visu pārējo.

kas vēl ir 9739 būvējumā

Tas pats laidiens pāriet uz .NET 11 priekšskatījumu. Iemesls ir konkrēts: .NET 10 bija WinForms ievades kļūda, ko lietotāji pieteica iepriekšējā būvējuma pavedienā. Būvējums arī pārslēdzas uz crossgen “composite” režīmu ātrdarbībai, pievieno jaunus flīzēšanas režīmus Mosaic efektam un prasa UAC paaugstinājumu tikai tad, kad tas patiešām vajadzīgs.

Parametru /wine var lietot arī uz Windows. Brūsters raksta, ka tā arī darīs, kad ķersies pie ātrdarbības labošanas.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie