Copyright © 2006, 2007, 2008 Michele Comignano
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts
A copy of the license is available here.

Introduzione al gioco su sistemi GNU/Linux

a cura di Michele Comignano

Questo documento ha l'intenzione di mettere l'utente che si affaccia per la prima volta nel panorama video-ludico su sistemi GNU/Linux a conoscenza delle problematiche del “video-giocare” multi-piattaforma e in particolare su sistemi GNU/Linux, esponendo i perché e i per come i giochi creati per Windows non possono girare sotto altri ambienti o perché così pochi giochi vengono portati a Linux o ad altri sistemi. Il documento comincerà con alcuni “Cos'è X” per agevolare la lettura successiva. Se dopo la lettura ritieni che io abbia scritto in modo erroneo o vorresti criticare qualche punto non esitare a contattarmi, possibilmente in modo costruttivo. Data la natura del nostro wiki puoi anche apportare modifiche della cui correttezza tu sia certo, altrimenti possiamo discuterne nel nostro forum.
Buona lettura!

Cos'è un programma

Un programma (e qui intendo un programma compilato) è il risultato della compilazione del codice sorgente, operazione svolta dal compilatore, che traduce comandi dati secondo un determinato linguaggio di programmazione (più vicino alla logica umana) scelto in linguaggio assembler (più lontano dalla logica umana e unico direttamente interpretabile dal calcolatore). Sebbene esistano linguaggi interpretati, quelli che necessitano del massimo delle prestazioni (quali altri se non i giochi?) hanno bisogno di questo processo. A seconda del sistema operativo che ha ospitato il processo di compilazione, il programma sarà eseguibile solo su quel sistema operativo in quanto il codice sarà generato per sfruttare chiamate di sistema e di libreria tipiche del sistema operativo e più in generale dell'ambiente in questione. Ecco perché un programma compilato su e per sistemi Windows non può girare nativamente (senza l'uso di artifici quali Wine o Cedega) sotto Linux o altri sistemi e viceversa. Per questo è necessaria l'operazione di porting che verrà illustrata di seguito.

Cos'è Linux

Siamo soliti chiamare brevemente Linux tutti quegli ambienti operativi aventi Linux come kernel (il nucleo del sistema), una serie di applicazioni e utilità GNU come supporti fondamentali e una miriade di altri programmi per le più disparate applicazioni. Il software libero non è altro che software prodotto da centinaia di migliaia di programmatori sparsi per la terra di cui viene rilasciato il codice sorgente, ovvero un insieme di files di testo scritti con un linguaggio formale (linguaggio di programmazione) che descrive algoritmicamente il programma prima della fase di compilazione. Questo ne amplia l'utilizzo e consente una collaborazione stretta tra programmatori, nonché la condivisione delle conoscenze. Esistono particolari licenze che tutelano il software libero impedendo ad esempio da me di compilare il OpenOffice.org, chiamarlo SuperMegaIncredibleOffice!! e dichiararlo un mio lavoro; posso invece prenderlo distribuirlo e farmi pagare per le cose più varie, da corsi di formazione a installazione e supporto, ma anche per la semplice consegna del programma ben impacchettato, tuttavia in quanto software libero non potrò rivendicarne la paternità. Esistono molte licenze di software libero e open source (che sono cose diverse sebbene con concetti comuni). L'esempio precedente è basato sulle modalità imposte dalla licenza GNU LGPL 2.

Possiamo collaborare noi stessi allo sviluppo di quei programmi che usiamo più frequentemente e possiamo diffondere le nostre modifiche, ammesso chiaramente che se ne abbiano le capacità. Linux e una quantità di software libero vengono distribuiti in pacchetti software che compongono le cosiddette distribuzioni GNU/Linux, ovvero i prodotti di aziende o singoli individui/comunità di utenti che raccolgono il software libero esistente lo mettono insieme come meglio credono fornendo eventualmente supporto commerciale o supporto informale attraverso forums, mailing list e altri mezzi tipicamente basati su Internet. Quindi chiunque può crearsi il suo sistema basato su software libero anche da zero. Linux non è certo l'unico sistema operativo libero (o Open Source) e molti sono certi del fatto che non sia il migliore disponibile, ma la sua diffusione fa si che oggi sia l'alternativa non proprietaria col miglior supporto esistente, dove per supporto si intende la considerazione da parte di produttori hardware e software e la quantità di persone, comunità di utenti e aziende che forniscono servizi di supporto.

Cos'è un videogioco

Può sembrare una banalità, ma è importante chiarire più profondamente cosa sia un videogioco e come funzioni. I videogiochi sono normali applicazioni, programmi paragonabili in tutto e per tutto ad ogni altra applicazione, dal gestionale ad CAD al software di videoscrittura. La peculiarità dei videogiochi è quella di simulare situazioni reali o immaginarie tali da calare il giocatore in un ambiente nuovo e inaccessibile nella vita reale e ingenerare così divertimento, terrore, immersione e più in generale intrattenimento. Spesso i videogiochi utilizzano particolari librerie (una libreria è un insieme di funzioni che realizzano procedure altrimenti troppo complesse, pronte all'uso e che mettono a disposizione di un programmatore funzionalità che altrimenti dovrebbe egli stesso implementare spendendo maggior tempo; in molti casi una libreria compie un passo astrazione nascondendo al programmatore i dettagli dell'hardware e/o dell'ambiente sottostante: ne è un esempio OpenGL che offre un interfaccia a meccanismi hardware differenti in ogni scheda video) che altri programmi non sono soliti usare. Quelle maggiormente usate nei giochi sono generalmente librerie sonore, grafiche, di input e di rete. Esistono molte di queste librerie, ed è lo sviluppatore a scegliere quella che più si adatta al suo stile (o alle richieste del mercato o più banalmente all'abitudine) per poi farne la base del proprio progetto.
Sebbene esistano molte di queste librerie, oggi giorno convivono due principali “blocchi” contrapposti, da una parte le DirectX (grafica, sonoro, rete, input e quant'altro) dall'altra una serie di librerie libere, ovvero le cui specifiche sono disponibili a chiunque e chiunque è in grado di crearne una propria implementazione (per implementazione si intende la creazione della libreria vera e propria utilizzando i meccanismi sottostanti da nascondere all'utente seguendo le specifiche pubbliche); alcune di queste librerie sono: OpenGL (grafica), SDL (grafica, sonoro, input, rete, sistema), OpenAL (sonoro 3D) e molte altre ancora. Queste ultime hanno la peculiarità di avere implementazioni su molti sistemi operativi, mentre le DirectX di Microsoft hanno un unica implementazione sotto un unico sistema operativo che è facile intuire e non ne esistono implementazioni complete alternative compatibili al 100% con DirectX. Il progetto Wine (di cui parleremo in seguito) prova a implementare Direct3D con discreti risultati.

Come vengono distribuiti i giochi per Linux

Quando si acquista un video gioco siamo abituati a inserire il CD e avviare l'installazione, quindi sarà possibile giocare. Non è tutto così semplice quando si parla invece di un gioco per Linux (o almeno varia a seconda di come è distribuito un gioco), specie per un gioco commerciale. Le modalità di installazione sono in generale diverse ma ce ne sono alcune più diffuse, tra cui alcune simile al tipico programma di installazione disponibile sui CD dei giochi. Il problema esiste perché molti publisher (le società che si occupano di promozione e distribuzione del prodotto) non supportano ufficialmente Linux, motivo per cui sul CD non vi è alcun programma di installazione e le procedure per avere il gioco funzionante su Linux sono più complesse. L'argomento richiede uno sforzo in più, motivo per cui abbiamo aperto la sezione Installazione giochi su questo wiki dove vengono descritte procedure generiche (le più diffuse) e procedure particolari per singoli giochi. In passato alcuni utenti sono venuti sul nostro forum chiedendo come giocare a Doom 3 o Quake 4 su tramite Wine e rimanere piacevolmente sorpresi dal fatto che esiste la versione nativa di questi giochi, seppur poco pubblicizzata.

Cos'è il porting

Si chiama porting l'operazione di modifica del codice sorgente di un software inizialmente progettato sotto una determinata piattaforma per consentirne la compilazione ed il funzionamento anche su piattaforme differenti da quella per cui è stato progettato. Il porting di un'applicazione può essere più o meno complicato a seconda della complessità dell'applicazione da “portare” e dalle librerie di cui la stessa fa uso (nonché dalla disponibilità di queste sulla nuova piattaforma obiettivo). Portare un programma che faccia uso di OpenGL, SDL e OpenAL progettato sotto ambiente Windows ad esempio potrebbe addirittura risultare una banalità per un programmatore mediamente esperto, mentre il porting di un gioco che sfrutti DirectX richiederebbe molto più lavoro in quanto ogni chiamata di funzione DirectX dovrebbe essere sostituita con una chiamata alternativa ed equivalente di una libreria “aperta” e non sempre c'è corrispondenza biunivoca tra funzioni di libreria differenti.

Per questi motivi tutti i giochi presenti sotto Linux hanno hanno un equivalente sotto altre piattaforme (Windows compreso), mentre pochi, davvero pochi dei giochi inizialmente progettati per Windows possiedono un port su Linux o altri sistemi, proprio perché l'operazione risulterebbe più difficoltosa dato il quasi esclusivo utilizzo delle librerie proprietarie Microsoft. La cosa rimarrebbe comunque fattibile, ma video-ludicamente i sistemi non Windows non hanno mercato e spesso è capitato che giochi progettati su Windows che pure utilizzassero un motore grafico scritto con librerie disponibili su molti altri sistemi tra cui Linux (o di cui addirittura esistesse già un port per Linux) non abbiano mai visto la luce su altri sistemi. Quindi superate le difficoltà tecniche, il problema è soprattutto commerciale. Il problema del giocare su Linux cesserà di essere un problema nel momento in cui questi sistemi abbiano una certa rilevanza a livello commerciale.

Drivers video

Oltre alla questione DirectX, l'ostacolo più grosso alla diffusione del gaming sotto Linux e la cattiva qualità dei drivers Linux di alcuni produttori di GPU (graphic processing unit, schede video insomma) che fanno gran parte del lavoro quando si tratta di 3D in tempo reale. Dopo il crollo 3dfx e Matrox esistono due principali produttori di schede video, Nvidia e ATi (ora AMD), le più diffuse tra gli utenti di PC dove vantano prestazioni analoghe grazie ai drivers forniti che sfruttano tutta la potenza dei sispositivi hardware via via commercializzati. Da una lato Nvidia offre drivers Linux ad ottimo livello livello con prestazioni analoghe se non superiori all'analogo per Windows, dall'altra c'è ATi che da poco ha cominciato a sviluppare sul serio drivers Linux che spesso danno problemi e in ogni caso limitano l'hardware. Dal momento che nelle fasce basse le schede video ATi sono più diffuse, questo è un problema per chi decida di migrare a Linux senza trascurare l'aspetto videoludico. Al momento in cui scrivo l'ultima versione dei drivers proprietari ATi rende accessibili prestazioni elevate anche sotto Linux, ma è un driver giovane che comunque dimostra un cambiamento di rotta. Questo non significa che ATi faccia prodotti peggiori di Nvidia, ma che il supporto che danno a Linux è differente. C'è poi Intel che non si è ancora tuffata nel mercato delle GPU per fanatici del 3D, ma che comunque offre ottimi equipaggiamenti e soprattutto sviluppa i drivers video Open Source che è tra i migliori disponibili.
Dunque giocare e sviluppare videogiochi sotto Linux sembrerebbe poco conveniente… ora forse, ma col crescente interesse dei produttori hardware il futuro si profila quantomai roseo. Addirittura ATi ha recentemente cominciato a rilasciare specifiche pubbliche per lo sviluppo di driver Open Source per le proprie GPU. Questo fatto unito alla crescente qualità del driver proprietario potrebbe cambiare le carte in tavola tra i due principali produttori attuali. E comunque la sana concorrenza è ciò che ci piace.

Wine/Cedega

L'architettura più diffusa nei PC odierni è quella x86 32 bit, la stessa usata da tutti i vari Windows e quella su cui Linux è più diffuso in ambito desktop. Proprio questa condivisione dell'architettura più utilizzata per questi due sistemi operativi, ha reso possibile lo sviluppo di un grande progetto che va sotto il nome di Wine (acronimo ricorsivo di Wine Is Not an Emulator). In soldoni Wine permette di avviare applicazioni create per Windows sotto ambienti Unix-like (Linux, *BSD, …) su architetture x86. Wine non è però un emulatore, proprio per il fatto che funziona solo negli stessi ambienti hardware in cui funzionano i sistemi Windows. Più correttamente Wine va definito come un implementazione libera delle API win32, ovvero di tutte quelle librerie win32 di cui fanno uso tutti i programmi per tali sistemi. Wine esegue programmi nativi per Windows in una sorta di ambiente controllato, dove ogni chiamata a libreria viene fatta puntare ad un equivalemnte chiamata a librerie realmente disponibili. Alcuni definiscono Wine un “linker al volo”.
I livelli raggiunti dal progetto Wine sono incredibili: programmi con Macromedia Flash o MS Office riescono a girare senza intoppi sotto Linux proprio grazie a Wine. La cosa positiva del progetto Wine è che non solo rende possibile l'utilizzo di programmi win32 sotto sistemi *nix-x86, ma fornisce agli sviluppatori tutto il necessario per eventuali porting nativi. Unreal Tournement 2004 ad esempio contiene codice del progetto Wine nella sua verione nativa per Linux.
Anche molti giochi possono essere giocati con Wine. Nelle recenti versioni si sta evolvendo a ritmi frenetici anche l'implementazione Direct3D contenuta in Wine e già adesso diversi giochi scritti con chiamate Direct3D funzionano su Linux: World of Warcraft, Half Life 2 ne sono un esempio.
Alcuni anni fa Transgaming ha intravisto in wine una nuova possibilità, ovvero una migliore implementazione delle librerie Direct3D. Inizialmente poteva sembrare un azzardo, ma ben presto lo sviluppo si rivelò promettente e ad oggi giochi come Half-Life 2 possono essere giocati con Cedega. Cedega non è altro che un'estensione commerciale di Wine che aggiunge una migliore implementazione DirectX fino alla 9. Tuttavia sebbene Cedega rimanga il riferimento per giocare con giochi per Windows su Linux il progetto originale Wine sta realizzando grossi sforzi nella stessa direzione. In ogni nuovo rilascio infatti vediamo qualche piacevole innovazione all'implementazione Direct3D ed è addirittura in cantiere l'implementazione di DirectX10.
Cedega non è un progetto libero l'utilizzo di questo software richiede una quota mensile che non tutti vogliono pagare sebbene la qualità di Cedega sia (in taluni casi) davvero buona. I recenti sviluppi di Wine tuttavia possono spesso evitare di prendere in considerazione Cedega e non non possiamo che esserne contenti.
Va comunque considerato che l'uso di Wine o Cedega è un passo verso un supporto serio e nativo anche su Linux che è ciò che noi vogliamo e auspichiamo per il futuro.

Vantaggi per l'utente

Ogni videogioco viene eseguito sul sistema operativo. Linux è da molti considerato un sistema più sicuro e più stabile di altri e l'utilizzo di un sistema stabile e sicuro non può che migliorare in generale l'esperienza di gioco. E' gratis: l'utente comune non si rivolge a RedHat o Novell per la messa a punto del proprio PC di casa, e per giocare con Linux non servono particolari strumenti a pagamento ma tutto ciò che serve è compreso in una qualunque distribuzione scaricabile gratuitamente. I giochi vanno comunque pagati, quelli commerciali si intende e quelli liberi sono molti e molto belli. Per l'utente più smaliziato c'è la possibilità di creare un sistema operativo ottimizzato (vedi Gentoo, Linux from scratch) per il proprio hardware, con tutti gli accorgimenti che una compilazione generica non offrirebbe, e un conseguente guadagno di prestazioni che in un videogioco 3D sono fondamentali.

Svantaggi per l'utente

I giochi nativi per Linux sono una minoranza della totalità e si limitano ai giochi che utilizzano le librerie libere o per cui siano stati compiuti grossi sforzi per il porting (questo non significa che sono giochi scadenti, vedi tutta la produzione di Id software, quelli di Doom III, i vari Unreal, Neverwinter Nights e molti altri). Spesso nemmeno tutti questi giochi hanno il port Linux, addirittura videogiochi basati su motori grafici già portati a Linux in origine non hanno mai visto la luce accanto al pinguino. Alcuni drivers per i dispositivi video non sono di grande qualità, altri produttori di hardware particolare nemmeno considerano Linux.

Per concludere

Spero di essere stato chiaro e di aver esposto quanto meglio il “problema” nonchè di aver sensibilizzato giocatori e sviluppatori ad un maggiore interesse nei confronti di Linux e più in generale delle immense possibilità che il software libero può offrire a utenti e sviluppatori. Se ho scritto qualcosa di cui vuoi discutere o proporre nuove soluzioni non esitare a contattarmi per parlarne in modo costruttivo o vieni nel forum di Playlinux dove tanti altri utenti sono pronti a discutere di questi argomenti.


 



 
argomenti_generici/instroduzione_al_gaming_sotto_linux.txt · Ultima modifica: 09/01/2008 16:58 da comick
 

 
Recent changes RSS feed Driven by DokuWiki

LA DOCUMENTAZIONE QUI PRESENTE NON HA GARANZIE IMPLICITE O ESPLICITE, USALA A TUO RISCHIO
LO STAFF DI PLAYLINUX E GLI AUTORI DEL MATERIALE QUI CONTENUTO NON SI ASSUMONO ALCUNA RESPONSABILITA'
DERIVANTE DALL'USO PROPRIO O IMPROPRIO DEL MATERIALE QUI CONTENUTO

TUTTI I MARCHI REGISTRATI APPARTENGONO AI RISPETTIVI PROPRIETARI

Playlinux 4 (layout e struttura) © 2006 Michele Comignano

CC
gli elementi grafici e strutturali di questo sito sono rilasciati sotto una Licenza Creative Commons
(Attribuzione - Non Commerciale - Non opere derivate 2.5)

i documenti presenti sul wiki (se non diversamente specificato) sono rilasciati sotto una Licenza Creative Commons
(Attribuzione - Non Commerciale - Condividi allo stesso modo 2.5)

cssxhtmlcrediti