Software-Entwicklung, Portierung und Programmiertools unter Linux

von Andreas Haumer, xS+S

Wien, 18. Februar 1998


Ziel des Vortrags

Der Vortrag richtet sich an Softwareentwickler, Projektleiter und Entscheidungsträger in Unternehmen im Bereich Software-Entwicklung und soll einen Überblick über die Einsatzmöglichkeiten und Vorteile von Linux sowohl als Entwicklungs- als auch als Zielplattform für kommerzielle Softwareprodukte bieten. Das Betriebssystem wird mit seinen Schnittstellen und Eigenschaften für den Softwareentwickler vorgestellt, und es werden eine Reihe von verfügbaren Entwicklungswerkzeugen präsentiert. Der Resourcenbedarf eines Linux-Entwicklungssystems wird ebenso beleuchtet wie die verschiedenen Möglichkeiten bei der Einbindung in das Netzwerk einer Entwicklungsabteilung oder Projektgruppe.

Weiters sollen einige typische Einsatzmöglichkeiten und Anwendungsbeispiele von Linux als Zielplattform aufgezeigt werden.

Aufbau des Vortrags

Zuerst wird in verschiedenen Szenarien vorgestellt, wie Linux als Zielplattform für kommerzielle Software vorteilhaft zum Einsatz kommen kann.

Danach sollen die Möglichkeiten von Linux als Entwicklungsplattform aufgezeigt werden: Anforderungen an die Hardware für den Einsatz als Einzelplatz-System und als Server für Entwicklungsabteilungen werden beschrieben. Daneben werden einige Betriebssystem-Eigenschaften vorgestellt, die eine Enbindung von Linux-Systemen in ein Entwicklungs-Netzwerk erlauben.

Danach soll eine Vorstellung der Betriebssystem-Schnittstellen und Eigenschaften helfen, Linux in die Familie der Betriebssysteme aus der Sicht des Softwareentwicklers einzuordnen. Hier werden Kernel- und Library Interface beschrieben. Ein Ausblick auf alternative Hardware-Plattformen schließt dieses Kapitel ab.

Eine Vorstellung von verfügbaren freien und kommerziellen 3rd-party-Tools, Dienstprogrammen, Libraries, Datenbanken usw. liefert dann einen Überblick über die aktuelle Dynamik und wachsende Bedeutung von Linux in der Software-Branche. Daß Linux für den professionellen Software-Entwickler geeignet ist zeigt auch die umfangreiche Dokumentation und der kommerzielle Support, die zu diesem System erhältlich sind.

Den Abschluß bilden einige Ausführungen zum Thema Copyright und Lizenzierung von kommerzieller Software auf einem freien System wie Linux.

Linux als Zielplattform

Linux ist ein relativ junges Betriebssystem, das seine Wurzeln in der bewährten UNIX Architektur hat und von Beginn an eine rasante Entwicklung genommen hat. In den Anfängen zu Recht - oder eigentlich bereits zu Unrecht - abwertend als "Hacker-Spielzeug" bezeichnet, steht seit etwas mehr als einem Jahr mit der Production-Release "2.0" eine Version zur Verfügung, mit der Linux endgültig zu einem ausgereiften und voll ausgestatteten Betriebssystem für PC's geworden ist.

Die Funktionalität und Stabilität des Betriebssystem-Interfaces braucht keinen Vergleich zu scheuen, eine Portierung von bestehenden Unix-Anwendungen auf Linux ist in den meisten Fällen völlig problemlos und daher wird Linux bereits von vielen Software-Firmen erfolgreich als Zielplattform für ihre Software-Produkte eingesetzt.

Folgende Einsatz-Kategorien sind dabei von besonderem Interesse:

Turn-Key Systeme

Was ist ein "Turn-Key System"? Üblicherweise versteht man darunter vor allem ein Computer-System, das in einer bestimmten Umgebung eine bestimmte, spezielle Aufgabe zu erfüllen hat. Dieses Computer-System setzt sich zusammen aus der Hardware, dem Betriebssystem und einer mehr oder weniger umfangreichen Anwendungs-Software.

Üblicherweise stellt der Lieferant des "Turn-Key Systems" das System selbst komplett zusammen, d.h. er wählt die Hardware und das Betriebssystem aus und entwickelt dazu die Anwendungssoftware entsprechend den Kundenanforderungen. Der Kunde eines typischen Turn-Key Systems benötigt vor allem die Funktionalität des Gesamtpaketes, das System selbst wird hier meistens als "Black-Box" betrachtet, der Aufbau und die Zusammenstellung der einzelnen Komponenten ist dabei von sekundärer Bedeutung.

Für ein derartiges Szenario eignet sich Linux hervorragend. Für den Software-Entwickler stellt es eine ideale Arbeitsumgebung dar, worauf ich später noch genauer eingehen werden. Das System ist äußerst stabil im Betrieb und eignet sich somit problemlos auch für Anwendungen, die eine hohe Verfügbarkeit im Dauerbetrieb erfordern, wie z.B. Datenbank-Server, Meßwerterfassungssysteme. Point-Of-Sales Terminals, usw. Als Beispiel kann hier der xS+S Kommunikations-Server angeführt werden, der in einigen Installationen mit wartungsfreien Uptimes von mehr als 400 Tagen bei einer Verfügbarkeit von 100% aufwarten kann.

Für den Hersteller eines Turn-Key Systems stellt Linux auf Grund seiner günstigen Kostenstruktur eine interessante Alternative dar. Da für die Betriebssystem-Software selbst keine Lizenzkosten anfallen, lassen sich so auch größere Stückzahlen kostengünstig realisieren, durch den Wegfall der Fixkosten bei der Betriebssystem-Lizenz bleibt mehr finanzieller Spielraum auf der Anwendungsseite.

Mit Linux wird ein Turn-Key System auch sehr gut skalierbar, je nach Anforderung kann vom 386 bis zum Pentium-II oder Dual PentiumPro unterschiedlich leistungsfähige Hardware zum Einsatz kommen. Falls die Leistungsfähigkeit eines Standard-PC für die Anwendung nicht mehr ausreicht, kann z.B. ein mit einem DEC Alpha aufgebautes Linux-System verwendet werden, das eine entsprechend höhere Systemleistung, auch im Multi-User Betrieb, liefert und trotzdem die gleiche Betriebssystem-Umgebung zur Verfügung stellt und Quellcode-kompatibel bleibt.

Die Anwendung kann von der umfangreichen Funktionalität des Betriebssystems wie z.B. pre-emtive Multitasking, Netzwerkunterstützung für verschiedene Protokolle, Remote-Access für Fernwartung profitieren. Ein derartiges Linux-System fügt sich hervorragend in ein heterogenes Netzwerk-Umfeld ein, ein Linux "Turn-Key System" arbeitet problemlos mit vorhandener Infrastruktur wie X-Terminals, LAN-Drucker, andere Workstations, Server oder auch Windows-Arbeitsplätzen zusammen.

Beispiele: xS+S Kommunikations-Server (auf ix86 und DEC Alpha Architektur), Network-Computer, xS+S Remote X-Terminal, Meßstations-Rechner

Standard-Anwendungen

Mit der steigenden Verbreitung von Linux wird der Markt der Linux-Anwender auch für Anbieter von Standard-Anwendungen interessant. Wie bereits erwähnt gibt es Schätzungen, die derzeit von ca. 5 Millionen Linux-Anwendern weltweit ausgehen. Viele dieser Anwender haben beruflich oder als Universitätsangehörige mit Computersystemen zu tun. Sie sind zu Linux gewechselt, weil sie den Nachteilen des Mainstreams und der Monopolisierung entkommen wollen. Je größer die Zahl dieser Anwender wird, desto größer wird der Bedarf an Standardsoftware für dieses System.

Softwarefirmen beginnen bereits, diesen Bedarf zu befriedigen. Mittlerweile existieren bereits mehrere Office-Pakete, Algebra-Software, CAD-Software, Datenbanken, Datenvisualisierungssysteme usw. für Linux, so daß der gesamte EDV-Bedarf einer Software-Firma bereits vollständig mit Linux-Software abgedeckt werden kann. So sind z.B. dieser Artikel und auch die Vortragsunterlagen komplett auf Linux-Systemen entstanden.

Diese Entwicklung gewinnt ihre eigene Dynamik: Je mehr Anwendungen für Linux zur Verfügung stehen, desto mehr Anwender wechseln auf dieses System. Und je mehr Anwender auf Linux wechseln, desto größer wird der Markt für entsprechende Anwendungssoftware.

Auch entsprechende Infrastruktur für den Vertrieb von Standard-Anwendungen steht zur Verfügung. Dieser Bereich war lange Zeit ein Schwachpunkt eines nur über das Internet zu beziehenden Systems. Mittlerweile ist die Auswahl an Händlern, die Software für Linux anbieten, beachtlich. Viele Hersteller von Standard-Paketen nutzen den Vertriebsweg über Linux-Distributionen, um durch dieses "Software-Bundling" den Aufwand für den eigenen Vertrieb zu minimieren.

Beispiele: StarOffice, ApplixWare, Mathematica, MicroStation, Adabas-D

Entwicklungswerkzeuge

Auch Software-Entwickler benötigen Software zur Unterstützung ihrer Arbeit. Und obwohl mit einem Linux-System üblicherweise eine große Auswahl an Programmen für die Software-Entwicklung mitgeliefert wird, bleibt noch genügend Platz für kommerzielle Angebote.

Anbieter von "Integrated Development Environments", GUI-Builder, Datenbanken, Funktionsbibliotheken u.ä. finden im Linux-Markt gute Absatzchancen. Auch hier kann man von der Dynamik rund um die Entwicklung dieses Betriebssystems profitieren.

Beispiele: Im Kapitel Verfügbare Entwicklungswerkzeuge werden einige der bereits verfügbaren Werkzeuge vorgestellt.

Hardware-Treiber

Ich möchte nicht auf diesen etwas speziellen Bereich der Software-Entwicklung vergessen. Wie sich in der letzten Zeit gezeigt hat, nutzen viele Hersteller von Hardware wie PC-Erweiterungskarten oder alternativen Hardware-Plattformen den Linux-Markt als weitere Absatzmöglichkeit, indem sie für dieses Betriebssystem eigene Treiber entwicklen und diese meistens kostenlos zusammen mit der Hardware oder über das Internet zur Verfügung stellen. So unterstützt z.B. Digital aktiv mit mehreren Mitarbeitern die Portierung von Linux auf die Alpha-Hardware, oder Hersteller von seriellen Multiport-Karten wie Stallion, SCSI-Controllern wie Tekram oder ISDN-Karten wie ELSA entwickeln selbst Treiber für ihre Hardware oder unterstützen zumindest die Linux-Entwickler mit Informationen oder Leihgeräten.

Da Linux in einigen Bereichen der Computer-Industrie bereits zu einem beachtlichen Mitspieler mit großem Marktanteil geworden ist (hier ist vor allem der Bereich der Internet Service Provider zu nennen), ist für Hersteller von Hardware für diese Bereiche wie z.B. Hochgeschwindigkeits-Netzwerkkarten, serielle Multiport-Karten, ISDN-Karten usw. eine Unterstützung ihrer Produkte durch Linux zu einem beachtlichen Verkaufsargument geworden.

Beispiele: DEC (Alpha-Port), Elsa (Grafikkarten, ISDN-Controller), Stallion (serielle Multiport-Karten), Buslogic, ICP Vortex, Tekram (SCSI-Controller)

Linux als Entwicklungsplattform

Wie bereits erwähnt stellt Linux eine äußerst interessante Software-Entwicklungsplattform dar, da es die Mächtigkeit und Flexibilität eines UNIX-kompatiblen Betriebssystems besitzt, als Freeware zu einem unschlagbaren Preis im Quellcode erhältlich ist und aus einem günstigen Standard-PC ein leistungsfähiges Multiuser-Entwicklungssystem macht.

In einer Linux-Umgebung ist es leicht möglich, rasch ein weiteres Entwicklungs- oder Testsystem in Betrieb zu nehmen, falls kurzfristig Bedarf entsteht, während bei anderen Plattformen oft erst teure Lizenzen oder schwer lieferbare Hardware angeschafft werden muß.

Aber auch wenn das Software-Endprodukt nicht für den Einsatz auf Linux-Systemen bestimmt ist, d.h. Linux nicht die Zielplattform darstellt, bietet die Verwendung eines Linux-Rechners Vorteile bei der Entwicklung der Software (Cross-Platform Development), worauf in den nachfolgenden Kapiteln noch näher eingegangen wird.

In den folgenden Abschnitten sollen die Anforderungen und Möglichkeiten von Linux als Software-Entwicklungsplattform aufgezeigt werden. Wie sich zeigen wird, verfügt ein Linux-System über alle Funktionen, die ein Software-Entwickler von einer optimalen Entwicklungsplattform erwarten kann.

Hardware-Anforderungen

Linux ist ein sehr gut skalierbares, aber auch genügsames Betriebssystem. Die Anforderungen, die ein Linux Software-Entwicklungssystem an die Hardware stellt, können daher bei gleichbleibender Betriebssystem-Software in Abhängigkeit vom Einsatzgebiet sehr unterschiedlich sein.

Workstations und Server werden in der Software-Entwicklung vor allem mit Compile-Jobs spürbar belastet. Editierarbeiten fallen auch bei mehreren Entwicklern kaum ins Gewicht, während Debugging-Sessions je nach Anwendung mehr oder weniger Resourcen benötigen können.

Im Multiuser-Betrieb muß das System natürlich entsprechend der Arbeitsweise der Entwicklergruppe dimensioniert werden.

Eine Linux-Workstation auf PC-Basis für den Einsatz als Single-User Software-Enwicklungssystem sollte beispielsweise mindestens über einen Pentium-133, 32MB RAM, 2GB SCSI-Festplatte und Grafikkarte/Monitor mit möglichst hoher Auflösung verfügen.

Ein Linux-Server als Entwicklungsrechner für ein Team mit etwa 5-10 Mitarbeitern sollte dagegen z.B. über einen Pentium oder K6-200, mindestens 128MB RAM und 2 Ultra-Wide SCSI Festplatten mit je 2-4GB Speicherkapazität verfügen. Als Server benötigt das System dagegen keine leistungsfähige Grafikkarte oder Monitor.

Nach oben hin sind fast keine Grenzen gesetzt, da Linux auch SMP-fähig ist und somit Multiprozessor-Systeme unterstützt.

Einbindung ins Entwicklungs-Netzwerk

Sobald am Software-Entwicklungsprozeß mehrere Personen beteiligt sind, wird die Verfügbarkeit einer entsprechenden Netzwerk-Infrastruktur zu einem wesentlichen Faktor für die Produktivität. Ein Betriebssystem als Software-Entwicklungsplattform sollte daher diese Features standardmäßig beherrschen.

Linux unterstützt eine große Anzahl von verschiedenen Netzwerk-Protokollen. Es gibt daher auch eine Reihe von Möglichkeiten, eine Linux-Workstation oder einen Linux-Server in ein vorhandenes oder neu aufzubauendes Netzwerk einzubinden. Die Grundlagen dazu werden im Vortrag "Linux als Intranetserver im heterogenen Umfeld" erläutert. Ich möchte hier daher nur auf einige praktische Aspekte für die Softwareentwicklung eingehen.

Client/Server

Um möglichst hohe Produktivität in einem Entwicklungs-Team zu erzielen, muß die vorhandene Netzwerk-Infrastruktur gemeinsam genutzte Resourcen wie z.B. Drucker, Plattenkapazität oder Informations-Server zur Verfügung stellen. Linux kann hier sowohl als Server als auch als Client eingesetzt werden.

Eine Linux-Workstation kann so z.B. Netzwerkdrucker ansprechen, Netzwerklaufwerke über NFS einbinden und natürlich an der Kommunikation zwischen den Projekt-Mitarbeitern über File-Transfer, E-Mail oder das WWW teilnehmen.

Ein Linux-Server kann umgekehrt angeschlossene Drucker oder Festplattenlaufwerke im Netzwerk zur Verfügung stellen, oder als Web- und E-Mail-Server fungieren.

Da es auf einem Unix-System keine strikte Trennung zwischen Client und Server gibt, ist eine Mischung dieser Anwendungen ohne weiteres möglich. So kann z.B. ein an einer Linux-Workstation angeschlossener Drucker auch von anderen Systemen im Netzwerk mitbenutzt werden.

In einem heterogenen Netzwerk kann ein Linux-Rechner auch als Server für Macintosh- oder Windows-Arbeitsplätze dienen, indem Drucker und Festplatten über Appletalk oder als Windows-Shares über das SMB Protokoll zur Verfügung gestellt werden.

Datensicherung

In einem derartigen Umfeld ist es auch einfach möglich, die Datensicherung zentral auf dem Linux-Server durchzuführen. Wichtige Projekt-Dateien können zentral auf dem Server gespeichert und von dort auf Bandlaufwerken (z.B. DAT) regelmäßig gesichert werden.

Kommunikation

Für ein Software-Entwicklungsteam ist die Kommunikation zwischen den Projektmitarbeitern von entscheidender Bedeutung. Sofern sich nicht alle Mitglieder des Projekts am selben Ort befinden, muß dafür gesorgt werden, daß eine effiziente Kommunikations-Infrastruktur existiert. Selbstverständlich erfüllt ein Linux-System auch diese Anforderungen, es existiert eine große Anzahl an Programmen zur Bearbeitung von E-Mail, On-Line Chat, File-Transfer oder auch HTML-Seiten. Es existieren auch kommerzielle Groupware-Applikationen, die die Arbeit in größeren Projektgruppen, auch im Wide-Area-Network, erleichtern.

Ein Linux-System kann als Remote Access Server konfiguriert werden und so den Zugang für Heimarbeitsplätze ermöglichen. Mit der Anwendung "Remote X-Terminal" ist sogar eine Einbindung von X11 Arbeitsplätzen über langsame Wählverbindungen (Analog-Modem oder ISDN) möglich.

Auch als Fax-Server kann ein Linux-System eingesetzt werden, so daß dem Software-Entwickler eine große Anzahl an Kommunikationsmöglichkeiten zur Verfügung steht.

Software- und Projektmanagement

In einem Software-Projekt mit mehreren Mitarbeitern muß natürlich auch großer Wert auf ein entsprechendes Software- und Projektmanagement gelegt werden. Neben frei verfügbaren, netzwerktransparenten Systemen wie CVS existieren auch kommerzielle Werkzeuge, die das Software- und Projektmanagement unter Linux unterstützen. Darauf wird im Kapitel Verfügbare Entwicklungswerkzeuge noch genauer eingegangen, wo einige dieser Werkzeuge vorgestellt werden.

Betriebssystem-Interface, Utilities und Standard-Bibliotheken

Wie präsentiert sich ein Linux-System nun dem Software-Entwickler auf technischer Ebene? Welche Schnittstellen stehen einem Entwickler zur Verfügung, um Anwendungssoftware für ein Linux-System zu schreiben?

Obwohl Linux nicht offiziell als "Unix-System" bezeichnet werden kann, kann generell gesagt werden, daß ein Linux-System zu einem sehr großen Teil den X/Open bzw. POSIX-Spezifikationen entspricht, und zwar auf verschiedenen Ebenen wie Kernel System-Calls und Library-Interface (POSIX.1), oder Shell-Interface und Standard-Utilities (POSIX.2). Linux präsentiert sich dem Software-Entwickler als stabiles und ausgereiftes "Unix-kompatibles" System, und eine Portierung von bestehenden, POSIX-kompatiblen Quelldateien stellt üblicherweise kein großes Problem dar.

Neben der POSIX-konformen Betriebssystem-Schnittstelle existieren einige Erweiterungen sowohl aus der BSD- als auch der SystemV Unix-Welt, die eine Portierung von Software von und auf diese Plattformen weiter erleichtern. Dazu kommen noch einige neue Features wie z.B. das Prozeß-Filesystem oder ladbare Kernelmodule, die so auf anderen Unix-Systemen nicht zu finden sind und daher für eine reine Cross-Platform Entwicklung eher zu meiden sind.

Kernel und System-Schnittstellen

Der Kernel ist die zentrale Software, die auf einem Linux-System die Hardware den Anwendungsprogrammen verfügbar macht. Er übernimmt unter anderem folgende Aufgaben:

Der Linux-Kernel stellt eine völlige Neu-Implementation der Unix-Spezifikationen dar und ist vollständig im Quellcode verfügbar. Der Linux-Kernel wird für verschiedene Hardware-Plattformen dabei aus dem selben Quellcode generiert, so daß die Funktionalität und die Schnittstellen des Kernels auf allen Hardware-Plattformen gleich sind. Architektur-abhängige Details sind, wo notwendig, in eigenen Quelldateien zusammengefaßt.

Der Linux-Kernel unterstützt zusammen mit den wichtigsten System-Schnittstellen viele für Software-Entwickler interessante Features wie zum Beispiel:

Wichtige Design-Entscheidungen bei der Entwicklung des Linux-Kernels, aber auch den Standard-Libraries und Betriebssystem-Utilities wurden und werden immer unter Berücksichtigung der bestehenden Unix-Standards (POSIX, X/Open) getroffen.

Binärformat-Standards

Linux erkennt und unterstützt verschiedene Formate für Libraries, Object-Dateien und ablauffähige Programme. Als wichtigstes Format ist ELF ("Executable and Linking Format") zu nennen, das dem SVR4 Standard entspricht und auch unter Linux standardmäßig zum Einsatz kommt. Durch dieses Binärformat ist es dem Software-Entwickler sehr leicht möglich, Shared-Libraries und dynamisch ladbare Programm-Module zu generieren.

Um Programme von anderen PC-Unix Versionen wie z.B. SCO Unix ablaufen zu lassen, steht eine iBCS-kompatible Schnittstelle zur Verfügung. Allerdings werden für den Ablauf von dynamisch gelinkten Programmen die original Shared-Libraries benötigt.

Auf Alpha-Plattformen unterstützt Linux das ECOFF Binärformat, das z.B. auch von DEC Unix verwendet wird. Damit ist es möglich, manche DEC Unix Programme auch auf Linux-Alpha ablaufen zu lassen, wobei auch hier für dynamisch gelinkte Programme die original Shared-Libraries zur Verfügung stehen müssen.

Auch Java-Programme können direkt gestartet werden, da über eine entsprechende Kernel-Schnittstelle die benötigte Virtual Machine automatisch gestartet wird.

Das ältere "a.out" Format wird nach wie vor untertützt, sollte jedoch für aktuelle Projekte nicht mehr verwendet werden.

Standard-Bibliotheken und Schnittstellen

Neben der Betriebssystem-Schnittstelle entspricht auch das Standard-Library Interface den POSIX Spezifikationen. Die von Linux verwendete GNU-C Standard-Library der Free Software Foundation ist, wie die meisten Projekte der FSF, nicht nur unter Linux, sondern auch auf vielen weiteren Unix-Plattformen verfügbar. Das garantiert weite Verbreitung und intensiven Test in Produktionsumgebungen, was in weiterer Folge zu hervorragender Stabilität der Bibliotheken und Programme führt. Natürlich ist auch die Standard-Library im Quellcode verfügbar.

Es soll hier auch erwähnt werden, daß sich am 10. Oktober 1997 im "86open" Projekt (siehe dazu <http://www.telly.org/86open>) Vertreter der wichtigsten Hersteller von Unix-Systemen für Intel-Hardware wie SCO, Sun, BSDI und Vertreter der Linux-Entwickler unter anderem auf die Linux Standard-Library als gemeinsames Interface für die jeweiligen Unix-Implementationen geeinigt haben. Damit soll erreicht werden, daß Programme, die sich an die 86open Spezifikation halten, auf allen beteiligten Plattformen ohne Emulation o.ä. ablaufen können.

Neben der Standard C-Library stehen auf einem Linux-System noch die C++ Standard-Libraries, X11 Bibliotheken, Curses (nach X/Open), Termcap und vieles mehr zur Verfügung.

Moderne SW-Technologie

Neben den bisher erwähnten Schnittstellen und Diensten, die ein Linux-System dem Software-Entwickler zur Verfügung stellt, existieren auch verschiedene Implementationen von modernen Software-Technologien, von denen ich einige erwähnen möchte:

Linux auf verschiedenen Hardware-Plattformen

Linux wurde ursprünglich für die Intel-Plattform entwickelt. Mittlerweile existieren Portierungen unter anderem für Alpha, SPARC und PowerPC Systeme. Obwohl sich die meisten dieser Portierungen noch im Beta-Stadium befinden, ist die Stabilität z.B. von Linux-Alpha bereits so hoch, daß dieses System eine interessante Entwicklungs-Plattform darstellt. Wie im nächsten Kapitel erwähnt wird, existieren auch bereits mehrere kommerzielle Compiler für verschiedene Programmiersprachen für diese Plattform.

Ein Linux-Alpha System als Entwicklungs- und/oder Zielplattform bietet verschiedene interessante Vorteile. Da die Alpha-CPU ein 64bit -Prozessor ist, kann mit einem Linux-Alpha System die eigene Anwendungssoftware kostengünstig auf "64Bit-Tauglichkeit" getestet und optimiert werden, so daß Inkompatibilitäten zwischen 32Bit und 64Bit Systemen in der Anwendung rasch behoben werden können.

Durch die Leistungsfähigkeit der Alpha-CPU vor allem im Bereich der Floating-Point Operationen ist ein Linux Alpha System auch eine interessante Zielplattform für numerisch-wissenschaftliche Spezial-Anwendungen.

Mit der kommenden Version Linux 2.2 wird die Alpha-Plattform auch in der Linux Production-Release standardmäßig untertützt werden.

Verfügbare Entwicklungswerkzeuge

Eine Software-Entwicklungsplattform muß neben den System-Interfaces natürlich auch Werkzeuge für den Entwickler zur Verfügung stellen, die ihn bei seiner Tätigkeit unterstützen.

Hier steht Linux in der Tradition der Unix-Systeme: die große Zahl an nützlichen kleinen Werkzeugen, die ein Unix-System so ideal für Software-Entwickler machen, sind natürlich ebenfalls auf einem Linux-System verfügbar. Es handelt sich dabei meistens um Neuentwicklungen aus dem GNU Projekt der Free Software Foundation, und diese gelten allgemein als leistungsfähiger und auch stabiler als die meisten kommerziellen Implementationen. Die Liste umfaßt unter anderem viele Unix-Tools, Standard-Editoren und viele andere Werkzeuge.

Einige Utilities sind auf Standard Unix-Systemen nicht zu finden, sondern stammen aus dem "Werkzeug-Kasten" des GNU Projektes.

Diese Utilities sind vor allem für Cross-Platform Entwicklung interessant, da damit Anpassungen an unterschiedliche Systemumgebungen weitgehend automatisiert werden können. Die Werkzeuge der FSF wären ohne diese Utilities nicht auf derart vielen verschiedenen Unix-Systemen verfügbar.

Natürlich lassen sich diese Werkzeuge auch für umfangreiche Projekte nutzen, so daß bei Einhaltung der von diesen Werkzeugen vorgegebenen Programmier-Richtlinien meistens ein einfaches

configure; make all; make install

genügt, um ein Software-Paket auf einer anderen System-Plattform zu compilieren und zu installieren.

Generell läßt sich sagen, daß die Arbeitsumgebung einer Linux-Workstation keinen Vergleich in Komfort oder Produktivität zu scheuen braucht. Ausgestattet mit einer grafischen Benutzeroberfläche, eingebettet in das Netzwerk der Arbeitsgruppe und mit Zugriff sowohl auf die lokalen Resourcen als auch auf das Internet ist eine Linux-Workstation eine ideale Plattform für Softwareentwickler.

Im den folgenden Kapiteln soll ein kurzer Überblick über die wichtigsten Werkzeuge gegeben werden. Die jeweiligen Listen umfassen sowohl frei verfügbare als auch kommerzielle Implementationen und erheben keinen Anspruch auf Vollständigkeit. Viele der frei verfügbaren Werkzeuge sind bei einer Linux-Distribution standardmäßig vorhanden, Adressen der Hersteller von kommerziellen Produkten können am Linux-Messestand erfragt werden, teilweise steht dort auch weiteres Informationsmaterial zur Verfügung.

Für manche der erwähnten Produkte existieren Demo-Versionen mit eingeschränktem Funktionsumfang oder Laufzeitbeschränkung, die meistens über das Internet geladen werden können.

Viele der hier erwähnten Produkte sind nicht nur für Linux, sondern auch für andere Unix-Plattformen erhältlich.

Editoren

Für Linux existieren viele verschiedene Text-Editoren mit besonderen Eigenschaften speziell für den Software-Entwickler, sowohl mit einfachem Character-Interface als auch mit grafischer Benutzeroberfläche. Die Wahl des "besten" Editors bleibt dabei natürlich dem persönlichen Geschmack vorbehalten, Diskussionen über dieses Thema können da schon manchmal zu kleinen Glaubenskriegen ausarten.

Die folgende Liste enthält ausschließlich Text-Editoren für den Software-Entwickler zur Erstellung von Sourcecode.

Compiler und Interpreter

Für Linux existiert eine große Anzahl von Compilern und Interpretern für die verschiedensten höheren Programmiersprachen. Für die kommerziell verfügbaren Implementationen von Compilern und Programmiersprachen wird von den Herstellern natürlich auch professioneller Support geleistet.

Die folgende Liste enthält einen Auszug aus den für Linux verfügbaren Compilern und Interpretern für verschiedene Programmiersprachen.

ADA

Basic

C

C++

COBOL

Eiffel

FORTRAN

JAVA

Lisp

Modula-3

Pascal

SmallTalk

TCL/TK

4GL

Debugger

Der Standard-Debugger auf Linux-Systemen ist GDB, der Debugger des GNU Projekts der FSF. Der GDB gehört zur Kategorie der Soucecode-Debugger und ist ähnlich aufgebaut wie beispielsweise der "xdb" (Standard Unix-Debugger). Er bietet alle Funktionen, die man von einem leistungsfähigen Werkzeug dieser Art erwartet wie Einzelschrittabarbeitung, Breakpoints, Betrachten und Verändern von Variableninhalten, Stacktrace und Post-Mortem Debugging. Die Bedienung erfolgt im einfachsten Fall über ein einfaches Command-Line Interface.

Für den GDB existieren verschiedene Benutzeroberflächen, die die Bedienung vereinfachen und den Entwicklungsprozess beschleunigen können. Die Editoren Emacs und XEmacs haben einen Debugger-Modus, der während einer Debugging-Session die Kontrolle des Source-Codes vereinfacht.

Das Programm DDD ("Data Display Debugger", <http://www.cs.tu-bs.de/softech/ddd>), das ursprünglich als Diplomarbeit von zwei Studenten der TU Braunschweig entstanden ist, bietet eine sehr leistungsfähige grafische Benutzeroberfläche für den Debugger GDB.

Neben dem Sourcecode-Debugger GDB gibt es noch weitere Werkzeuge zur Fehlersuche in Programmen. Mit strace steht ein Tool zur Verfügung, das die Kommunikation zwischen Kernel und Anwendungsprozess an der System-Call Schnittstelle überwacht. Mit ihm lassen sich auch bereits laufende Prozesse überwachen.

Über das Prozess-Filesystem lassen sich viele Informationen, die der Linux-Kernel für jeden einzelnen Prozess verwaltet, auslesen und auch verändern. Dazu gehören die Speicherstuktur, das Environment oder auch die vom Prozess geöffneten Dateien.

Debugging-Libraries dienen zur Überwachung der Speicherverwaltung und können die Suche nach Speicherlecks oder Zugriffen auf fehlerhaft verwendete Speicherbereiche erleichtern.

Software Configuration Management

Für Linux sind die frei erhältlichen Software Configuration Management Werkzeuge RCS und CVS verfügbar, die eine Verwaltungung von Software-Releases sowohl für Einzelbenutzer als auch netzwerktransparent für Projektgruppen ermöglichen. Eine Implementation des in der Unix-Welt ebenfalls verbreiteten SCCS ist derzeit als Beta-Version erhältlich. Daneben existieren auch kommerzielle Implementationen

IDE

Integrierte Entwicklungsumgebungen existieren für verschiede Ansprüche und Programmiersprachen. Die einfachste, jedoch bereits recht mächtige Variante stellt der Emacs dar, der Programm-Editor mit Syntax-Highlighting, Schnittstelle zu Revision-Control Systemen wie RCS, Steuerung der Übersetzung und eine Debugging-Oberfläche bietet. Daneben möchte ich folgende kommerzielle Produkte erwähnen:

Groupware

Zur Unterstützung von Projektteams existieren auch verschiedene Groupware Programme:

3rd-Party Libraries und Toolkits

Neben den standardmäßig auf Linux-Systemen verfügbaren Bibliotheken existieren viele weitere Libraries und Funktionensammlungen für die verschiedensten Anforderungen. Das Angebot reicht von Debugging-Libraries über Datenbank-Funktionssammlungen bis zu Widget-Bibliotheken und GUI Toolkits.

Datenbanken

Datenbanken sind oft ein wesentlicher Bestandteil von Software-Paketen. Auch hier existiert bereits eine beachtliche Anzahl an Paketen, aus denen der Software-Entwickler auswählen kann.

GUI-Builder

GUI Builder unterstützen den Software-Entwickler bei der Programmierung einer grafischen Benutzer-Oberfläche. Abhängig von der verwendeten Widget-Bibliothek existiert auch hier eine Reihe von Werkzeugen für Linux.

Package-Tools

Ein Software-Package Tool hat die Aufgabe, die Verwaltung (Installation/De-Installation) eines Softwarepakets auf dem Zielsystem zu erleichtern. Derartige Werkzeuge existieren auch für Linux, wobei sich in der letzten Zeit der RedHat Package Manager� rpm durchgesetzt hat. Ein Hersteller eines Software-Pakets kann dieses Werkzeug verwenden, um die Umgebung, in der die Software installiert werden soll, zu definieren. Der Package-Manager sorgt bei der Installation durch den Anwender dann dafür, daß die einzelnen Dateien korrekt aufgespielt werden, daß abhängige Dateien auch wirklich vorhanden sind und verhindert bei Konflikten, daß ein inkonsistenter System-Zustand entsteht.

Genauso sorgt der Package-Manager dafür, daß bei der De-Installation von Software-Paketen alle Abhängigkeiten konfliktfrei gelöst werden.

Für diesen Package-Manager existieren verschiedene grafische Benutzeroberflächen, die die Erstellung und Verwaltung von derartigen Paketen erleichtern.

Wird ein derartiges Werkzeug nicht benötigt, können Software-Pakete natürlich auch mit den Standard-Unix-Werkzeugen wie tar aoder cpio installiert werden.

Als Distributions-Medien kommen üblicherweise CD-ROM, aber auch DDS oder das Internet zum Einsatz.

Dokumentation

Obwohl, oder gerade weil, Linux ein frei erhältliches Betriebssystem ist, existiert eine außerordentlich umfangreiche Dokumentation und Sekundärliteratur für die verschiedensten Bereiche, so daß ein Software-Entwickler bei Fragen und Problemen nicht hilflos vor spanischen oder auch böhmischen Dörfern steht.

Ein Großteil dieser Dokumentation ist über das Internet abrufbar und liegt in englischer, deutscher und verschiedenen anderen Sprachen vor. Das "Linux Documentation Project" <http://sunsite.unc.edu/LDP> hat es sich dabei zur Aufgabe gemacht, die im Internet verfügbare Dokumentation zu sammeln und zentral verfügbar zu machen. Dazu zählen unter anderem folgende Dokumente:

Viele dieser Informationen sind auch einzeln oder gesammelt in gedruckter Form in Fachbuchhandlungen erhältlich.

Da ein Linux-System zu einem großen Teil POSIX-kompatibel ist, kann natürlich auf die gesamte Unix-Literatur als Informationsquelle zurückgegriffen werden. Mittlerweile beschäftigen sich viele Autoren auch speziell mit Linux, so daß kein Mangel an Information besteht.

Durch das offene Entwicklungsmodell von Linux (siehe auch Eric S. Raymond's Artikel "The Cathedral And The Bazaar", <http://www.ssc.com/linux/Eric/cathedral.html>) existiert eine große Anzahl an System-Entwicklern und Usern, die über das Internet (vornehmlich das Usenet und verschiedene Mailing-Lists) Ideen, Infomationen und Erfahrungen austauschen. Diese Informationsquellen kann und sollte jeder Software-Entwickler nutzen und sich so bei Fragen oder Problemen direkt an den System-Entwickler wenden. Da kann es dann auch schon einmal passieren, daß speziell für eine Anwendung ein bestimmtes Feature im Linux-Kernel implementiert oder ein versteckter Fehler im GNU Compiler behoben wird.

Die wichtigsten Internet-Adressen lauten:

WWW:

Usenet:

Mailing-Listen:

mailto:linux-kernel@vgers.rutgers.edu, die Mailing-Liste für die Linux System-Entwickler

Als zusätzliche Informationsquelle bietet sich natürlich der Quellcode an, der sowohl für den Kernel selbst, als auch für die meisten Standard-Bibliotheken und Programme zur Verfügung steht. Obwohl nicht die Regel, kann im Einzelfall ein Blick in die Quellen von Betriebssystem und Libraries manche Unklarheit beseitigen.

Viele Beratungs- und SW-Entwicklungsfirmen bieten auch professionelle Unterstützung und Support für Linux an, so daß bei auftretenden Fragen und Problemen unmittelbar ein Ansprechpartner zur Verfügung steht. Adressen und Ansprechpartner finden sich unter den erwähnten Internet-Adressen oder können am Linux-Messestand kontaktiert werden.

Copyright und Lizenzbestimmungen

Der Linux Kernel und viele der auf einem Linux System vorhandenen Programme sind unter der GNU "General Public License (GPL)" bzw. der "Library General Public License (LGPL)" lizenziert.

Zusammengefaßt sorgen diese Lizenzbestimmungen dafür, daß die Quellen des Kernels und der verschiedenen Programme und Libraries offen liegen, weitergegeben werden dürfen, Modifikationen ebenfalls im Quelltext verfügbar bleiben und diese Bestimmungen nicht nachträglich verändert werden dürfen.

Das Copyright an den Quelldateien verbleibt jedoch nach wie vor beim jeweiligen Programmautor, d.h. die Quellen sind nicht "Public Domain"!

Die GPL oder LGPL verlangen nicht, daß die entsprechend lizenzierten Programme kostenlos weitergegeben werden müssen. Den Preis für diese Programme bestimmt nach wie vor der Markt, für eine Standard Linux-Distribution beträgt der Preis derzeit zwischen ATS 500,- und ATS 1.000,-

Circa 80-90% der auf einem Linux-System vorhandenen Programme und Libraries unterliegen diesen Lizenzbestimmungen.

Etwa 10% unterliegen meist anderen freien Lizenzen, wie z.B. der BSD Lizenz.

Kommerzielle Software unterliegt natürlich im allgemeinen anderen Lizenzbestimmungen, die die Rechte des Herstellers an Programm und Quelldateien regeln und im Normalfall wesentlich restriktivere Bestimmungen vorsehen.Schließlich Entgegen manchen Einwänden stellt dies im Normalfall keine Verletzung der GPL oder LGPL dar und wird sogar ausdrücklich befürwortet.

Es ist jedoch folgender Punkt zu beachten: Sobald die Quellen von Software, die unter der GPL oder LGPL lizenziert ist, benutzt werden, um daraus ein abgeleitetes Programm zu erstellen, muß dieses Programm ebenfalls unter der GPL oder LGPL lizenziert werden und daher der Quelltext freigegeben werden.

Dies betrifft vor allem Hardware-Treiber, die direkt Modifikationen am Linux-Kernel vornehmen müssen. Falls dies der Fall ist, müssen die betreffenden Quelldateien ebenfalls unter der GPL freigegeben werden.

Für die Entwicklung von Hardware-Treibern für Linux bestehen daher drei Möglichkeiten:

Die einfache Verwendung von GPL-Lizenzierten Libraries (d.h. compilieren oder linken) ist von derartigen Überlegungen nicht betroffen, so daß Anwendungsprogramme unter jeder beliebigen Lizenz veröffentlicht werden dürfen.

Die GPL und LGPL stellen mit ziemlicher Präzision die juristischen Randbedingungen für freie Software zur Verfügung, ohne die es Programme wie Emacs, GCC oder den Linux-Kernel niemals gegeben hätte.

Andreas Haumer - xS+S Software-Entwicklung unter Linux 18. Februar 1998