Simple DirectMedia Layer

(kurz SDL; englisch für „einfache DirectMedia-Schicht“) ist eine freie Multimedia-Bibliothek für verschiedene Betriebssysteme. Sie steht ab der Version 2.0 unter der zlib-Lizenz. Alle älteren Versionen vor 2.0 stehen unter der GNU Lesser General Public License (LGPL).

Konzept 
Die Bibliothek stellt eine plattformunabhängige Schnittstelle (API) für Grafik-, Sound- und Eingabegeräte bereit, die sich hauptsächlich zur Entwicklung von Spielen und Multimediaanwendungen eignet. Durch die Unterstützung vieler verschiedener Plattformen kann für eine Applikation eine hohe Portabilität bzw. Plattformunabhängigkeit gewährleistet werden. SDL kann mit dieser Eigenschaft auch als Middleware verstanden werden.

Es existieren offizielle und inoffizielle SDL-Anbindungen für dutzende Programmiersprachen, die eine Integration in viele Projekte und Entwicklungskontexte möglich macht.

Durch die Verwendung der liberalen zlib-Lizenz ist eine lizenzrechtlich problemlose Verwendung der SDL-Bibliotheken in binärer und Quelltext-Form sowohl in Open-Source (GPL-kompatibel) wie proprietären Projekten (kein Copyleft) problemlos möglich.

SDL ist in C geschrieben und zeichnet sich besonders durch einen kompakten Code aus, was diese Bibliothek auch für Anfänger leicht erlernbar machen soll. Durch die weite Verbreitung und die Nähe zur Open-Source-Bewegung existieren viele frei verfügbare Beispielprogramme für verschiedene Anwendungsfälle, die zeigen, wie die Bibliothek verwendet werden kann.

Verbreitung 
Bezeichnend für die Beliebtheit und Bekanntheit von SDL ist die Anzahl an Spielen und Programmen, die mit ihr geschrieben wurden, z. B. listet die Spieledatenbank MobyGames 105 Spiele im Jahr 2012, auf der SDL-Webseite selbst sind knapp 700 Spiele gelistet. Bekannte kommerzielle Beispiele sind Angry Birds oder Unreal Tournament, aus dem Open-Source-Bereich z. B. OpenTTD, The Battle for Wesnoth, OpenRA oder Freeciv.

Bei plattformübergreifenden Spieleveröffentlichungen wird häufig auf SDL als Abstraktionsbibliothek gesetzt, da sich der Aufwand gegenüber Implementierungen mit den jeweiligen nativen Plattform-APIs signifikant verringert. Ein Beispiel sind die in den Humble Indie Bundles enthaltenen meist SDL-basierenden Linux-, Mac- und Android-Versionen.

Weiter findet SDL häufig Verwendung für (spätere) Portierungen auf neue Plattformen, z. B. Homeworld für das Pandora-Handheld oder Jagged Alliance 2.

Auf SDL aufsetzende Nicht-Spiele-Anwendungen sind z. B. die Emulatoren DOSBox und VisualBoyAdvance.

Verwendung fand SDL auch an Universitäten und in der Lehre in Kursen zu Multimedia und Informatik.

Es wurden auch mehrere Bücher über das Entwickeln mit den SDL-Bibliotheken veröffentlicht (siehe den Literaturabschnitt unten).

Entwicklungsgeschichte

Entstehung bei Loki Software 
SDL wurde von Sam Lantinga während seiner Zeit als leitender Programmierer (1999 bis 2001) bei Loki Software entwickelt. Der Simple DirectMedia-Layer bildet (oft auch im Zusammenhang mit den OpenGL- und OpenAL-Schnittstellen) die Grundlage für einige kommerzielle Spieletitel für Linux, die von Loki portiert wurden, wie z. B. Civilization: Call to Power, Descent³ oder auch Sid Meier’s Alpha Centauri.

Schon damals wurde SDL unter die LGPL gestellt. Durch diesen Schritt wurde SDL schnell bekannt, da damit nun sowohl proprietäre als auch freie Software entwickelt werden konnte.

Weiterentwicklung durch die Community 
Obwohl Sam Lantinga im Jahr 2001 von Loki Software zu Blizzard Entertainment wechselte, verwaltet er die Entwicklung von SDL noch immer und ist nach wie vor einer der aktivsten SDL-Entwickler. Ryan C. Gordon, ein weiterer Ex-Loki-Mitarbeiter, arbeitet ebenfalls weiter an und mit SDL z. B. für die Linux- und Mac-Versionen von Spielen im Humble Indie Bundle.

Inzwischen gibt es eine große Community und weitere freiwillige Helfer, die sich an der Weiterentwicklung beteiligen.

Für über zwanzig Programmiersprachen existieren SDL-1.2-Anbindungen anderer Hersteller.

SDL 2.0 
Die Weiterentwicklung der Version 1.2 war als Version 1.3 geplant und wurde im August 2013 als Version 2.0 veröffentlicht. Zusätzliche Fähigkeiten im Vergleich zur Vorversion sind Unterstützung für den Betrieb an mehreren Monitoren, durch Hardware beschleunigte zweidimensionale Grafik sowie bessere Unterstützung von Unicode. Weiterhin sollte Unterstützung von Multitouch und haptischen Eingabegeräten z. B. mit Force Feedback Einzug halten.
Im Gegensatz zu früheren Versionen nutzt SDL 2.0 die zlib-Lizenz. Durch diese soll es möglich sein, proprietäre Produkte (Closed Source) zu entwickeln, welche die SDL dann auch statisch binden („linken“) dürfen.

Snapshots ab Februar 2012 ändern die Versionsnummer von 1.3 auf 2.0. Die erste stabile Version von SDL 2.0 wurde am 13. August 2013 veröffentlicht.

Die aktuelle stabile Version SDL 2.0.12 wurde am 11. März 2020 veröffentlicht.

Anbindungen an SDL-2.0 existieren Mitte 2014 für C, C++ und drei weitere Programmiersprachen.

Funktionalität 
Die SDL-Bibliothek enthält vor allem für Multimedia-Anwendungen notwendige Funktionalitäten, für die eine weitverbreitete, plattformunabhängige und gleichzeitige performante API nicht existiert:
 Videoausgabe Videomodus setzen, Zugriff auf den Framebuffer, Nutzung der Hardwarebeschleunigung für Grafikoperationen, optional über EGL
 Ereignis-Behandlung Ereignisse für Tastatur, Maus, Programmende und Sichtbarkeit des Programms
 Audioausgabe In 8 und 16 bit, mono/stereo
 Audio-CDs Vollständige Audio-CD-API (nicht mehr in SDL 2.0)
 Threads Thread-API, Semaphore, Mutex-Objekte und Condition-Variablen zur Synchronisation
 Zeitgeber Periodisch, Wartezeit, abgelaufene Zeit abfragen
 Konvertierung der Byte-Reihenfolge Big Endian/Little Endian

Der Simple DirectMedia Layer stellt selbst keine Funktionen für 3D-Grafik zur Verfügung, weil mit OpenGL bereits eine weitverbreitete, plattformunabhängige 3D-API zur Verfügung steht. SDL wurde von Beginn an für das Zusammenspiel mit OpenGL entworfen und soll spezifisch die Multimediaaspekte abdecken, die außerhalb der OpenGL-Funktionalität liegen. Deshalb ergänzen sich beide Bibliotheken optimal und auch 3D-Spiele wie z. B. Tux Racer sind problemlos möglich.

Weitere Einsatzmöglichkeiten wie Internet-Socket-Abstraktion oder Schriftzugriff werden bewusst nicht offiziell in SDL aufgenommen, jedoch als Erweiterungen von anderen Anbietern auf der LibSDL-Homepage angeboten.

Unterstützte Plattformen 

Offiziell unterstützte Plattformen:
 Android (seit SDL 2.0)
 Linux
 macOS
 Windows (Win32 und Win64)

Unterstützung im SDL-Code enthalten, aber nicht offiziell unterstützt:
 AmigaOS, AROS
 Atari
 BeOS
 BSD-Derivate (FreeBSD, OpenBSD, NetBSD)
 Unix (AIX, Solaris, IRIX, Tru64 UNIX, QNX)
 Dreamcast
 Microsoft Windows CE
 MorphOS
 Nintendo DS (seit SDL 1.2.12)
 Pandora (seit SDL 2.0)
 Symbian OS (seit SDL 1.2.12)

SDL läuft auf sämtlichen unixoiden Plattformen, sofern diese den POSIX-Standard unterstützen.

Auf sonstige Art unterstützte Plattformen:
 DOS (FreeDOS und Ähnliche; Windows-Versionen laufen mit Hilfe von HX DOS Extender)
 Dingoo A320
 GP2X
 Haiku
 SkyOS
 Xbox

Beispielhafte Galerie SDL-basierender Spiele

Siehe auch 
 Allegro (Programmbibliothek)
 ClanLib
 Simple and Fast Multimedia Library (SFML)

Literatur 
 Alberto García Serrano: Programación de videojuegos en SDL. Ediversitas, ISBN 84-95836-08-4 (Buch über die Verwendung der SDL in der Videospiele-Entwicklung, spanisch).
 Ernest Pazera: Focus On SDL. Muska & Lipman / Premier-Trade, ISBN 1-59200-030-4 (weiteres Buch zur SDL, welches sich ebenfalls mit weiteren Bibliotheken für den Simple DirectMedia Layer, wie beispielsweise SDL_net, befasst).
 Ron Penton: Data Structures for Game Programmers, Muska & Lipman/Premier-Trade, ISBN 1-931841-94-2 (geht hauptsächlich zwar auf Datenstrukturen eines Spiels ein, enthält aber auch Beispiele mit der SDL).
 John R. Hall: Programming Linux Games. No Starch, ISBN 1-886411-49-2 (Erstes Buch, welches sich mit der SDL befasst. Enthält auch Informationen über die Programmierung in Linux im Allgemeinen und der Netzwerkprogrammierung), Onlineversion:  .

Weblinks 

 Offizielle internationale SDL-Website
 Offizielle deutsche SDL-Website
 
 Technische Information
 SDL Documentation Wiki (englisch)
 Deutsche Übersetzung der SDL-Funktionen

Einzelnachweise 

Grafikbibliothek
C-Bibliothek
Computerspiel-Entwicklungssystem
Computerspielmusik
Freie Systemsoftware