WINE_is_not_an_emulaor

Transcript

WINE_is_not_an_emulaor
Wine... is not an emulator
Vincenzo De Maio – HCSSLUG
LINUX DAY 2009
Indice
●
Cos'è?
●
Perchè Wine
●
Esecuzione di Wine
●
Applicazioni supportate
Cos'è?
●
W.I.N.E.: Wine Is Not an Emulator
●
Non è un emulatore :-)
●
–
Veramente?
–
Si.
Piuttosto un insieme di API open source che
–
Reimplementano le funzionalità delle dll di
Windows
–
Forniscono il supporto per l'esecuzione di
applicazioni per Windows su sistemi Unixlike.
Un po' di storia
●
●
●
●
Wabi (1992)
Supporto alle applicazioni 16 bit e primi port
su sistemi operativi diversi da Linux(1993)
Supporto alle applicazioni a 32 bit (1995)
Creazione del sito ufficiale www.winehq.com
(1997)
●
Wine adotta la licenza LGPL (2002)
●
Rilascio di Wine 1.0 (2008)
Progetti simili
●
Reactos
–
●
Linux Unified Kernel
–
●
http://darwine.sourceforge.net/
Odin
–
●
http://www.longene.org/en/index.php
Darwine
–
●
http://www.reactos.org
E/OS
http://odin.netlabs.org/
Indice
●
Cos'è?
●
Perchè Wine
●
Esecuzione di Wine
●
Applicazioni supportate
Perchè Wine
●
●
Diversificazione dell'offerta
Un vasto numero di popolazioni omogenee
sono un rischio per la società
–
●
●
Ogni sostituto di Windows dovrebbe essere
in grado di eseguire applicazioni per
Windows
“Chicken and egg” problem
–
●
Potato Famine, 1845
Interessi delle aziende vs crescita del
mercato di Linux
Benefici di Wine
Indice
●
Cos'è?
●
Perchè Wine
●
Esecuzione di Wine
●
Applicazioni supportate
Architettura
NTDLL
●
●
Fornisce le tipiche funzioni di un kernel
In molti casi, le funzioni di KERNEL32 non
fanno altro che wrappare quelle di NTDLL
KERNEL32
●
●
Implementazione della console
Fornisce supporto alle applicazioni WIN16 e
DOS
WINESERVER
●
Un thread UNIX separato
●
Fornisce funzionalità di IPC
●
Inizializza
il
socket
che
verrà
successivamente utilizzato dai processi di
WINE
Driver Wine
●
●
●
Wine non consente l'esecuzione dei driver
nativi di Windows
In questo layer si occupa quindi di
interfacciare l'applicazione con l'hardware
richiesto
Necessario che
–
Il driver sia supportato in Unix
–
Wine abbia implementato lo strato di codice
necessario a comunicare con esso tramite
l'API di Windows.
Esecuzione di Wine
●
$ wine nomeprogramma.exe
●
Tutto qui?
●
Vediamo cosa significa :)
Primi passi (1)
●
L'eseguibile di Wine controlla soltanto il
modello di threading in uso (NPTL o
LinuxThreads)
–
●
●
Ragioni “storiche” :)
In base ad esso, viene eseguito uno tra
wine-pthread
o
wine-kthread
attraverso un preloader (su Linux)
Il preloader si occupa dell'esecuzione di
glibc
Primi passi (2)
●
●
Il preloader è un binario ELF che si occupa
di imporre al processo appena creato uno
spazio di indirizzamento windows-style
Garantisce, tra le altre cose
–
L'inizializzazione unica di glibc
–
La protezione di aree importanti dello spazio
di indirizzamento
–
Il linking del “vero” binario di wine alle librerie
necessarie
Esecuzione
●
●
In pratica, una concatenazione di varie
inizializzazioni
Da libwine viene chiamata la funzione
wine_init()
–
●
Invochiamo __wine_process_init() (da
NTDLL)
–
●
Alcuni task di setup di base
Setta la connessione con il wineserver
Invochiamo __wine_kernel_init() (da
kernel32)
–
… e qui avviene il lavoro “sporco” :)
__wine_kernel_init()
●
Ottiene le informazioni di startup dal
wineserver
●
Inizializza il registro
●
Determina il tipo di eseguibile
–
winelib, win32, win16...
●
Carica il programma in memoria
●
Inizializza lo stack del processo
●
CI SIAMO QUASI!
start_process()
●
Carica il programma da eseguire
●
Effettua la rilocazione
●
Carica le dll
●
Ottiene l'entry point dell'applicazione
●
Salta all'entry point
Ce l'abbiamo fatta!
Altre applicazioni utili
●
winecfg
–
●
regedit
–
●
Utility per scaricare librerie di terze parti
msiexec
–
●
Implementazione di regedit
winetricks
–
●
Tool di configurazione grafico per wine
Implementazione di msiexec
control
–
Implementazione del pannello di controllo
Indice
●
Cos'è?
●
Perchè Wine
●
Esecuzione di Wine
●
Applicazioni supportate
Applicazioni supportate
●
Suddivise sul sito http://appdb.winehq.org in
5 livelli di compatibilità
–
Platinum: Software eseguito senza problemi
–
Gold:
–
Silver: Applicazioni con qualche problema che non
Software eseguito correttamente
modifiche alla configurazione di default
con
influenza l'utilizzo tipico
–
Bronze: Applicazioni che non possono essere
eseguite senza dei workaround e comunque non
vengono garantite tutte le funzionalità
–
Garbage: Software che non è assolutamente
possibile eseguire :'(
Alcuni esempi (1)
●
3D Game studio (Platinum)
●
Rational Rose 8.0 (Platinum)
–
Vi prego, non è colpa mia...
●
Visual Basic 6 Enterprise edition (Gold)
●
Cinema 4D (Platinum)
●
Matlab 7.6 (Gold)
●
Dreamweaver CS4 (Gold)
●
Picasa 3 (Silver)
Alcuni esempi (2)
●
Half life 2 (Platinum)
●
The elder scrolls: Oblivion (Platinum)
●
Star Wars: Jedi Academy (Platinum)
●
Doom 3 (Gold)
●
Civilization IV (Gold)
●
Spore (Gold)
●
Guild Wars (Gold)
Alcuni esempi (3)
●
Fallout 3 (Gold)
●
The Sims 3 (Gold)
●
Command & Conquer 3 (Gold)
●
Team Fortress 2 (Gold)
●
Assassin's creed (Gold)
●
Call of Duty 4 1.0 e 1.7 (Gold)
●
Football Manager 2009 9.0.3 (Gold)
●
Mass effect (Bronze)
E c'è anche...
●
World Of Warcraft (Platinum!)
–
Per la gioia di grandi e piccini!
Riferimenti
●
www.winehq.org
●
appdb.winehq.org
●
wiki.winehq.org
●
en.wikipedia.org/wiki/European_Potato_Fam
ine
That's all, folks!
GRAZIE PER LA
CORTESE
ATTENZIONE