# Conan (Software)

Conan ist eine in der Programmiersprache Python geschriebene Software, die zur Verwaltung von Software-Komponenten in Form von Paketen genutzt wird.
In erster Linie profitieren C- und C++-Projekte von den als Conan Packages bezeichneten Paketen, da die Umgebungen dieser Sprachen kein eigenes standardisiertes Paketmanagement zur Verfügung stellen.
Conan kann zur Verwaltung des Build-Prozesses (Übersetzung von Quellcode in Binärdateien) wie auch für die strukturierte Speicherung und Verteilung von Softwarepaketen eingesetzt werden.
Die Software ist als Open Source frei verfügbar und wird unter der MIT-Lizenz vertrieben.

## Beschreibung

Moderne Software besteht häufig aus einer Vielzahl von Teilkomponenten (z. B. Kommunikation, Algorithmen, Grafik, Benutzerschnittstelle), die von unterschiedlichen Entwicklern als Funktionsbibliotheken entworfen werden. Für die Zusammenführung solcher Bibliotheken in ein übergeordnetes Softwareprojekt liefern viele Programmiersprachen und Plattformen Werkzeuge mit, die diese Aufgabe übernehmen (z. B. Pip für Python, Cargo für Rust oder NuGet für .NET).
C/C++-Compilerhersteller haben unterschiedliche Build-Systeme entwickelt (z. B. MSBuild, Make), die je nach Plattform unterschiedlich aufgebaut sind. Hinzu kommen weitere Werkzeuge von Drittherstellern, die den Übersetzungsvorgang plattformübergreifend steuern können (z. B. CMake, Autotools, Ninja).
Conan setzt auf der bestehenden Architektur dieser Hilfswerkzeuge auf und archiviert die Resultate von Build-Prozessen als Quellcodes und Binärdateien in Conan-Paketen. Ein solches Paket wird eindeutig durch eine Referenz-Adresse identifiziert. Diese Referenz besteht aus einem name-Feld, einer version- und optional aus einem user- und channel-Bezeichner, die als name/version@user/channel (klassisch) bzw. vereinfacht nur mit name/version@ (seit 1.18.0) angegeben wird.
Beispiele sind: zlib/1.2.11@conan/stable oder zlib/1.2.13@
Abhängigkeiten zu anderen Komponenten werden durch Referenz-Adressen in Conan Requirements definiert. Bei Bedarf lädt Conan die notwendigen Abhängigkeiten auf das lokale System und übergibt die Dateipfade an das Buildsystem über definierte Variablen.
Ablaufbeispiel: Ein Programm benötigt die Bibliothek boost als Requirement. Conan lädt boost herunter, doch boost benötigt selbst zlib und bzip2, worauf Conan auch diese Bibliotheken herunterlädt. Dem Buildsystem werden die Dateipfade zu boost, zlib und bzip2 Quellcodes und Binärdateien übergeben.
Durch das Einrichten von Profilen für mehrere Plattformen und durch die Definition von Optionen in den einzelnen Softwarepaketen kann Conan aus den Quellen einer Komponente mehrere Varianten eines Pakets erstellen (z. B. eine für Windows, eine für Linux usw.). Jedes Conan-Paket wird nur an die Paketvarianten seiner Abhängigkeiten gebunden, die mit seinen eigenen Einstellungen kompatibel sind.
Da es auch möglich ist, zusätzlich zu den Binärdateien alle Quellcodes einer Komponente in ein Conan-Paket zu integrieren oder die Quellen per Download nachzuladen, besteht die Möglichkeit, ein Paket auf dem Zielsystem mit einem abweichenden Profil neu kompilieren zu lassen.
Als Standard-Onlinespeicher für Open-Source-Conan-Pakete wird conancenter eingerichtet, der auf der Software JFrog Artifactory aufbaut. Das Artifactory kann sowohl als Community Edition für quelloffene Projekte als auch als kommerzielles Produkt in Unternehmen eingesetzt werden, um individuelle Conan-Pakete darauf zentral abzulegen.
Die REST-APIs, die Conan für den Upload und Download von Paketen einsetzt, werden auch von weiteren Softwaresystemen wie Gitlab unterstützt, um neu erstellte Pakete in deren Datenspeichern zu lagern.

## Geschichte

Conan wurde von den spanischen Entwicklern Diego Rodriguez-Losada Gonzalez und Luis Martinez de Bartolome gestartet und auf GitHub im Jahr 2015 veröffentlicht. Das Projekt wird seither von vielen Entwicklern weltweit ständig erweitert. Der älteste Commit auf GitHub startete mit Version 0.4.0 am 1. Dezember 2015.
Auf der Entwicklerveranstaltung CppCon 2016 wurde Conan einem größeren Publikum vorgestellt. Und im November 2016 gab JFrog Inc. bekannt, dass ihr Softwareprodukt JFrog Artifactory Conan vollständig unterstützt. JFrog betreibt seither die öffentlichen Conan Remotes, auf denen Open-Source-Software Pakete hochgeladen und verteilt werden können. Bis 2021 waren diese Cloud-Dienste unter dem Namen Bintray bekannt, danach übernahm das aktuelle conancenter diese Aufgabe.
Die erste vollständige Version 1.0.0 wurde im Januar 2018 veröffentlicht. Seither folgten etwa alle 30 bis 60 Tage neue Nebenversionen von Version 1.x, die neben Bugfixes neue Funktionen in den Python-Bibliotheken von Conan hinzufügen und damit die Anwendungsmöglichkeiten erweitern.
Ende 2020 wurde mit dem Conan-2.0-Tribe die Entwicklung einer Erweiterung des Conan-Systems gestartet. Conan-2-basierte Projekte sind nicht abwärtskompatibel zu Conan-1.x-Projekten. Änderungen in den Python-APIs machen eine Code-Migration von Version 1 auf Version 2 notwendig.
Die erste offizielle Betaversion von Conan-2 wurde im Juni 2022 veröffentlicht. Parallel dazu wurde Conan 1.50.0 freigegeben.
Conan 2.0.0 wurde am 22. Februar 2023 veröffentlicht.