LAKI PINGVINI<>
022013<><>

Winelib

Drugačiji način portovanja Windows programa na Linux

O softverskom sloju Wine (Wine Is Not Emulator) pisali smo pre više godina (SK 2/2008) i zaključili da se radi o vrlo dobrom rešenju za pokretanje gotovih Windows aplikacija pod Linuxom. U međuvremenu se svašta promenilo nabolje, pa je Wine sada drastično kompatibilniji sa Windowsovim osnovnim sistemskim bibliotekama nego što je bio pre četiri godine. To automatski rezultuje boljom kompatibilnošću sa Windows aplikacijama koje se oslanjaju na te biblioteke. Nažalost, i dalje nije moguće pokretati ogromne i složene pakete, a da baš sve radi onako kako bismo voleli, ali zato veliki broj često korišćenih Windows aplikacija radi sasvim lepo, uključujući tu i brojne hardverski zahtevne video igre novijeg datuma.

Ako niste puki korisnik računara već se bavite i razvojem softvera za Windows, može vas interesovati tematika u vezi sa portovanjem aplikacija na Linux. Naravno, ako vaši postojeći programi rade lepo pod Wineom, problema najverovatnije nema. Štaviše, nije retkost da softverske kuće ili pojedinačni autori distribuiraju Linux „portove” svojih programa tako što prosto spakuju Windows verziju koja se automatski konfiguriše i pokreće preko Winea. Međutim, postoji i alternativni pristup, a to je rekompajliranje Windows biblioteka korišćenjem Wineliba. Jedino ograničenje u vezi sa ovim pristupom je što važi samo za programe pisane u jezicima C i C++ (pošto Windows API predstavlja čist C API).

Podsetimo, Windows aplikacija suštinski se sastoji od poziva raznih Windows API funkcija, poput funkcije CreateWindow za kreiranje prozora, CreateFile za otvaranje ili kreiranje fajlova, i slično. Sve one zapravo se nalaze u nekolicini sistemskih biblioteka (Kernel32, GDI32, User32), koje aplikacija dinamički poziva tokom izvršavanja. Čak i da ste svoj program pisali u nekom od drugih jezika ili frameworkova, sve naposletku mora da se završi pozivom odgovarajućih Windows API funkcija, slično kao što se na Linuxu svaki pristup fajlu izvodi preko sistemskog poziva „open”, bez obzira na to da li ste ga pozvali direktno iz C programa ili putem odgovarajuće funkcije u nekom high-level ili skript jeziku kao što su Perl ili Python. Dakle, Windows API predstavlja osnovu za izvršavanje svih Windows programa. Wine funkcioniše tako što sadrži iznova napisanu implementaciju većine ovih API funkcija. Kada na ovaj način pokrenete neki Windows program pod Linuxom, Wine će u stvari „presretati” pozive koje aplikacija pravi ka Windowsovim sistemskim bibliotekama i izvršavati ih koristeći sopstvenu implementaciju tih funkcija.

Winelib takođe predstavlja implementaciju Windows API funkcija, i to istu kao onu koju nudi Wine. Međutim, ovde nećete izvršavati gotov Windows EXE fajl preko Winea, nego ćete pod Linuxom rekompajlirati izvorni kôd svog Windows C/C++ programa, i to na taj način što ćete ga, umesto sa Windowsovim bibliotekama, linkovati sa specijalnim Wineovim bibliotekama koje sadrže implementaciju Windows API-ja. To u praksi znači sledeće: uzmete izvorni kôd svoje aplikacije (za koju prethodno morate obezbediti da može da se kompajlira pod MinGW-om na Windowsu, a to je svakako već slučaj ako ste je razvijali koristeći Dev-C++ ili Code::Blocks), a onda napravite određene izmene, koje se svode na uključivanje Winelib zaglavlja umesto standardnih Windowsovih zaglavlja (kao što je windows.h). Naposletku, Makefile vašeg projekta treba izmeniti tako da umesto poziva uobičajenih gcc/g++/windres kompajlerskih alata vrši pozive Wineovog „wrappera” u obliku alata winegcc/wineg++/wrc.

Jasno je da se ne radi o uobičajenoj raboti i logično je postaviti pitanje da li sve ovo vredi truda? Prednosti rekompajliranja Windows C/C++ aplikacija korišćenjem Wineliba svode se na veoma mali broj specifičnosti. Recimo, u programu Winelib možete da pravite Linux sistemske pozive. Tako svoj „port” možete dopuniti određenom funkcionalnošću koju ne biste mogli da izvedete (ili bar ne lako) u nativnoj Windows aplikaciji koju biste potom izvršavali preko čistog Winea. Takođe, uz pedantnije kodiranje možete održavati isti izvorni kôd za Windows i Linux, što potencijalno može rezultovati predvidljivijim ponašanjem aplikacije. Recimo, nećete koristiti Windows API pozive za koje znate da nisu dobro izvedeni u Wineu, već ćete upotrebiti neke druge funkcije koje ne prave probleme, a funkcionisaće ispravno kako na pravom Windowsu tako i pod Linuxom koristeći Winelib implementaciju.

Winelib je imao veći značaj pre više godina, kada Wine nije bio ovoliko unapređen, a krosplatformski kompajleri i okruženja (kao što su Lazarus i Mono) nisu bili toliko popularni. Ako ste ipak zagrejani za prebacivanje svojih starih C/C++ aplikacija na Linux na opisani način, dokumentacija i primeri na internetu solidno pokrivaju tematiku, pa možete krenuti od početne adrese na winehq.org. Međutim, ako se niste prepoznali u navedenim prednostima Wineliba, onda ne treba zanemariti ni staro, dobro izvršavanje preko običnog Winea, jer će to vrlo često biti sasvim dovoljno da vaš program i na Linuxu radi onako kako ste zamislili.

Ivan TODOROVIĆ

 
LiLi USB Creator 2.8.18
Winelib
Šta mislite o ovom tekstu?
Guayadeque 0.3.5
PhotoFilmStrip 1.5.0
eViacam 1.6.1

Licenca:
GNU LGPL
Veličina:
zavisno od distribucije i arhitekture
Cena:
biblioteka je besplatna
Adresa:
wiki .winehq .org /Winelib
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera