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