# Cdrtools

Die cdrtools sind eine Sammlung von portablen Open-Source-Programmen zur Datenaufbereitung und Aufnahme auf CD/DVD/BluRay-Medien („Brennen“ genannt), die größtenteils von Jörg Schilling entwickelt wurden. Hauptbestandteile sind:
* cdrecord, ein Brennprogramm
* cdda2wav, ein CD-Ripper mit paranoia-Unterstützung, der auch Metadaten und Hidden Tracks liest und damit eine vollständige Extraktion erlaubt
* libparanoia, eine Library-Version des relevanten Codes von cdparanoia
* mkisofs, zur Erzeugung eines CD-Dateisystems
* readcd, ein Ausleseprogramm mit CD-Clone-Fähigkeiten
Die cdrtools waren lange Zeit die Standardlösung zum Brennen von CDs unter Linux, bevor infolge einer Lizenzänderung die meisten großen Linux-Distributionen die aktuelle Version der Software (nach ihrer Interpretation der Lizenz) nicht mehr enthalten können. Jörg Schilling widersprach dieser Interpretation der Lizenz.

## cdrecord

cdrecord ist ein Brennprogramm, dessen Entwicklung Ende 1995 von Jörg Schilling auf Basis der seit August 1986 entwickelten libscg begonnen wurde.
Im Februar 1996 wurde es erstmals für Solaris veröffentlicht. Portierungen auf Linux, HP-UX, AIX, IRIX und 20 weitere Plattformen folgten ab 1997.
cdrecord wurde auf Betreiben der Datenarchivare der Europäischen Südsternwarte im Februar 1998 eines der ersten Programme mit DVD-Unterstützung. Der Quellcode zur DVD-Unterstützung konnte jedoch wegen einer Verschwiegenheitserklärung mit dem Laufwerkshersteller Pioneer lange Zeit nicht veröffentlicht werden und der Erwerb eines DVD-Brenners war in der Zeit zwischen September 1997 und August 2001 wegen der Vorbehalte der US-Filmindustrie reglementiert. Mit Erscheinen des ersten frei verkäuflichen DVD-Brenners im September 2001 wurden zunächst kostenlose Binärversionen von cdrecord-ProDVD herausgegeben und seit dem Frühjahr 2006 ist der gesamte Code von cdrecord-ProDVD quelloffen. Seit Juli 2007 bieten die cdrtools auch eine anfangs rudimentäre, mittlerweile aber vollständige Blu-Ray-Unterstützung.

## cdda2wav

cdda2wav ist ein CD-Ripper, dessen Entwicklung 1993 von Heiko Eißfeldt unter Linux begonnen wurde. Seit 1998 verwendet es die libscg als plattformunabhängigen SCSI-Transport und wurde dadurch portabel. Seit April 2002 nutzt cdda2wav die libparanoia, welche aus cdparanoia abgeleitet ist und vor allem bei beschädigten Medien von Vorteil ist. Zusätzlich wurde cdda2wav Anfang 2002 um herstellerspezifische Leseroutinen erweitert, die situativ bessere Leseeigenschaften als die Standardkommandos bieten. Dadurch kann cdda2wav auch stark beschädigte und absichtlich defekte Medien lesen, die in einigen Fällen mit den herkömmlichen Auslesemethoden nicht mehr verarbeitet werden könnten.

## readcd

readcd liest Datensektoren optischer Datenträger und ist daher als Ergänzung zu cdda2wav zu sehen. Es kann CDs auch im „Raw“-Modus zusammen mit zusätzlichen Metadaten lesen und ermöglicht dadurch ein „Klonen“ von CDs.
Eine weitere Funktion in readcd ist die Möglichkeit, Fehlerkorrekturdaten (C1/C2 bei CDs und PI8/PIF bei DVDs) auszulesen, um die Qualität eines Mediums zu beurteilen.

## mkisofs

mkisofs ist ein Programm zur Erzeugung von ISO-9660-Dateisystemabbildern. Es wurde 1993 von Eric Youngdale unter Linux begonnen. Seit 1997 wurde es in die cdrtools integriert und Eric Youngdale zog sich schrittweise aus der Entwicklungsarbeit zurück. Im August 1999 übergab Eric Youngdale die Entwicklung an Jörg Schilling.
Mkisofs unterstützt neben ISO 9660 auch Rockridge, Joliet und UDF.
Durch die Verwendung von libfind kann mkisofs die Eigenschaften und Optionen des find-Programms direkt nutzbar machen.

## Libparanoia

Libparanoia ist eine Software, deren Ursprung 1997 von Christopher Montgomery (Monty) als Patch zu cdda2wav geschrieben wurde, um die Auslesequalität auch bei beschädigten Medien und schlechten Laufwerken zu verbessern. Seit 1998 wird der Patch als cdparanoia, eine Abspaltung von cdda2wav, auch separat vertrieben. Jörg Schilling hat im Frühjahr 2002 schließlich die wesentlichen Teile der Funktionalität des Patches in die portable libparanoia überführt und damit für cdda2wav und andere Programme plattformübergreifend nutzbar gemacht.
Der relevante Code in cdparanoia setzt auf den Leseroutinen in cdda2wav auf und versucht durch abweichende Leseergebnisse als fehlerhaft erkannte Teile durch erneutes Lesen von ganzen Sektoren und durch das geschickte Mischen der Ergebnisse zu verbessern. Wenn ein Laufwerk Sektoren gar nicht lesen kann, weil entweder das Medium zu stark zerstört ist oder weil das Medium absichtlich vom Hersteller angebrachte Defekte besitzt, dann versagt der paranoia-Code. Eine Fehlererkennung wäre in solchen Fällen nur möglich, wenn sowohl in cdda2wav als auch in libparanoia eine Auswertung der C2-Fehlerinformationen stattfinden würde.

## Cdrtools als Name für das Gesamtpaket

Der Name „cdrtools“ wurde 1998 nach Integration von cdda2wav in den gemeinsamen Quellcode und in das gemeinsame Build-System eingeführt.
Unter Betriebssystemen wie Solaris, Linux oder FreeBSD verwenden zahlreiche Programme sowohl für die Konsole als auch mit grafischer Benutzeroberfläche für den eigentlichen Aufnahmevorgang die cdrtools oder dessen Abspaltung, darunter:
* K3b als Multifunktionsoberfläche von KDE zum Brennen und Kopieren von CDs und DVDs.
* X-CD-Roast, ein GTK-basierendes, plattformübergreifend verfügbares Programm für Linux, FreeBSD, OpenBSD und viele andere unixoiden Betriebssysteme
* Brasero für die Arbeitsumgebung Gnome
* Plugins für den KDE-Dateimanager Konqueror
* Plugins für den GNOME-Dateimanager Nautilus
Die Windows-Brennprogramme InfraRecorder und cdrtfe bauen als grafisches Frontends ebenfalls auf den cdrtools auf. Die Cdrtools sind auch für diverse weitere Betriebssysteme verfügbar.

## Lizenzdiskussion

Im Februar 2005 stellte Jörg Schilling sein Makefile-System, ein eigenständiges Projekt, das schon seit 1992 zur Steuerung der Kompilierung diverser Softwareprojekte verwendet worden war, auf die aus seiner Sicht freiere Lizenz CDDL um. Dieses System wird auch zur Erstellung der cdrtools verwendet. Darin sah das Debian-Projekt ein Problem wegen inkompatibler Lizenzen. Laut Autor standen die den GPL-Projekten in den cdrtools zugeordneten Makefiles in den Projektordnern weiterhin unter der GPL. Er beruft sich auf die Auslegung eines Juristen, nach der „Skripte zur Kompilation“ unter einer beliebigen Lizenz stehen dürfen, solange sie die Weitergabe erlaubt. Der Autor stellte weitere Teile der cdrtools auf die CDDL um, um die Lizenz zu vereinheitlichen, was die Bedenken aus dem Debian-Projekt aber nicht zerstreuen konnte.
Aufgrund dieser Problematik initiierte das Debian-Projekt eine Abspaltung der cdrtools unter dem Namen cdrkit und entfernte das ursprüngliche Projekt aus den eigenen Paketquellen. Viele andere Linux-Distributionen ersetzten ebenfalls cdrecord durch Debians Abspaltung. Gentoo ist als Quellcode-basierte Distribution von dieser Lizenzfrage nicht betroffen und bietet die aktuelle cdrtools-Version und die Abspaltung alternativ an. Oracle verteilt mit seinem Betriebssystem Solaris ausschließlich cdrecord. Slackware verfährt ebenso.
Die Tatsache, dass das GPL-Programm mkisofs gegen eine CDDL-Bibliothek linkt, wird vom Debian-Projekt noch immer als Verletzung der GPL angesehen. Allerdings betrachtet Jörg Schilling das binäre Ergebnis des automatischen Linkvorgangs nicht als abgeleitetes Werk, sondern als ein Sammelwerk im Sinne des US-Copyright-Gesetzes. Nach Rechtsauffassung von Juristen, die sich bisher zu diesem Thema geäußert haben, sind die Teile der GPLv2, welche sich auf eingebundene, externe Programmteile beziehen („The ‚Program‘, below, refers to any such program or work, and a ‚work based on the Program‘ means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.“) in dem Falle eines Sammelwerkes nicht anzuwenden, wobei allerdings Uneinigkeit über die Grenzziehung zwischen abgeleiteten Werken und Sammelwerken besteht. Mit seinen Ansichten, dass es sich bei den fraglichen Kombinationen um Sammelwerke (und nicht um abgeleitete Werke) handelt, widerspricht Schilling ausdrücklich den von ihm sogenannten „Behauptungen der FSF“ zur GPL.

## Versionsgeschichte

| Projektname | Vorabversionen | Vorabversionen | stabile Versionen | stabile Versionen |
| Projektname | erste | letzte | Versionen | Datum |
| cdrecord | | | Ältere Version; nicht mehr unterstützt: 1.00 | 4. Feb. 1996 |
| cdrecord | | | Ältere Version; nicht mehr unterstützt: 1.01 | 4. Okt. 1996 |
| cdrecord | | | Ältere Version; nicht mehr unterstützt: 1.02 | 20. Dez. 1996 |
| cdrecord | | | Ältere Version; nicht mehr unterstützt: 1.03 | 16. Mai 1997 |
| cdrecord | | | Ältere Version; nicht mehr unterstützt: 1.04 | 23. Mai 1997 |
| cdrecord | 1.5a1 | 1.5a9 | Ältere Version; nicht mehr unterstützt: 1.05 | 15. Sep. 1997 |
| cdrecord | 1.6a01 | 1.6a15 | Ältere Version; nicht mehr unterstützt: 1.06 | 18. Apr. 1998 |
| cdrecord | 1.6.1a1 | 1.6.1a7 | Ältere Version; nicht mehr unterstützt: 1.06.1 | 19. Okt. 1998 |
| cdrecord | 1.8a01 | 1.8a40 | Ältere Version; nicht mehr unterstützt: 1.08 | 28. Jan. 2000 |
| cdrecord | 1.8.1a01 | 1.8.1a09 | Ältere Version; nicht mehr unterstützt: 1.08.1 | 27. Apr. 2000 |
| cdrecord | 1.9a01 | 1.9a05 | Ältere Version; nicht mehr unterstützt: 1.09 | 20. Juli 2000 |
| cdrtools | 1.10a01 | 1.10a19 | Ältere Version; nicht mehr unterstützt: 1.10 | 22. Apr. 2001 |
| cdrtools | 1.11a01 2.0pre1 | 1.11a40 2.0pre3 | Ältere Version; nicht mehr unterstützt: 2.00 | 25. Dez. 2002 |
| cdrtools | 1.11a01 2.0pre1 | 1.11a40 2.0pre3 | Ältere Version; nicht mehr unterstützt: 2.00.3 | 28. Mai 2003 |
| cdrtools | 2.01a01 | 2.01a38 | Ältere Version; nicht mehr unterstützt: 2.01 | 9. Sep. 2004 |
| cdrtools | 2.01.01a01 | 2.01.01a80 | Ältere Version; nicht mehr unterstützt: 3.00 | 2. Juni 2010 |
| cdrtools | 3.01a01 | 3.01a31 | Ältere Version; nicht mehr unterstützt: 3.01 | 26. Aug. 2015 |
| cdrtools | 3.02a01 | 3.02a09 | Aktuelle Version: 3.02 | 18. Sep. 2022 |
| Legende:Alte VersionÄltere Version; noch unterstütztAktuelle VersionAktuelle VorabversionZukünftige Version |||||