Haben Sie eine Frage?

Open-Source-Lizenzen und Anwendungen auf Embedded Linux: ein praktischer Blickwinkel

Entwickler von proprietärer Software sind manchmal misstrauisch gegenüber Embedded-Linux-Plattformen, aufgrund der Auswirkungen von Open-Source-Lizenzen wie der GPL (der GNU Public License) für ihre Anwendungen. Sie befürchten, dass sie durch den Einsatz von Linux den Verpflichtungen aus den Open-Source-Lizenzen anderer Softwarekomponenten auf dem System in einer Weise ausgesetzt sein könnten, dass sie (durch Rechtsstreitigkeiten) gezwungen werden könnten, ihren Quellcode mit Wettbewerbern, Kunden oder der Öffentlichkeit zu teilen.

Ohne den Anspruch zu erheben, Rechtsberatung anzubieten, präsentiert dieser Artikel einige praktische Hinweise und Vorschläge für diejenigen, die darüber nachdenken, eine proprietäre Anwendung auf einer Open-Source-Plattform einzusetzen, basierend auf den typischen Erfahrungen vieler unserer Kunden, die gängige Plattformen wie Digi Embedded Yocto, Linaro, Android und andere verwenden.

Android als Open-Source-Alternative

Zugegebenermaßen ist der sicherste und zuverlässigste Weg, die GPL zu vermeiden, überhaupt nicht auf GNU/Linux zu laufen: Googles Android-Betriebssystem bietet eine Open-Source-Alternative für eingebettete Geräte, die von Grund auf bewusst so konzipiert wurde, dass sie GPL-lizenzierte Software aus ihrer Userspace-Umgebung eliminiert, zugunsten von Komponenten mit freizügigeren Lizenzen (wie die Apache- oder BSD-Lizenzen), die von den Entwicklern abgeleiteter Werke nicht verlangen, ihre Quellen zu teilen.

Moderne Android-Versionen enthalten im Wesentlichen keine GPL-Komponenten (abgesehen vom Linux-Kernel selbst, der keine Einschränkungen für Anwendungen vorsieht). Es sind Distributionen für gängige Hardware verfügbar (einschließlich der ConnectCore® SOMs von Digi), und Android wurde erfolgreich auf viele kundenspezifische Embedded-Boards portiert.

Auf der anderen Seite ist Android traditionell weniger gut für Headless-Systeme geeignet, und in gewisser Weise ist es ein Betriebssystem, das von und für Mobiltelefonhersteller und Mobilfunk Carrier gepflegt wird. Obwohl es heutzutage viele Talente für die Erstellung von Apps auf Telefonen gibt, sind Entwickler, die sich mit BSP (Board-Support-Packages) unter Verwendung von Embedded Android auskennen, in der Community etwas weniger verbreitet.

Überlegungen zur GPL bei eingebettetem GNU/Linux

Embedded Linux erfreut sich weiterhin einer großen Vielfalt an Hardwareunterstützung und einer großen Entwicklergemeinschaft, die auf allen Ebenen des Software-Stacks arbeitet. Für diejenigen, die nicht gegen Systeme mit GPL-Software sind, kann es eine ausgezeichnete, zuverlässige Plattformwahl sein. Zumindest nach unserer Erfahrung hat die überwältigende Mehrheit der Entwickler von Anwendungssoftware keine rechtlichen Probleme mit ihren Kunden, Konkurrenten oder der Öffentlichkeit.

Anwendungsentwickler auf Embedded Linux sollten dennoch ein paar grundlegende Konzepte und Faustregeln im Auge behalten. Wir werden die folgenden behandeln:

  • Grundlagen der GPL
  • Anwendung vs. Treiber
  • Open-Source-Bibliotheken
  • Statische vs. dynamische Verknüpfung
  • Kommunikation zwischen Prozessen
  • Standard-C-Bibliothek
  • Python und andere Programmiersprachen

Grundlagen der GPL

GPL-lizenzierte Software ist Open Source: Der Quellcode muss mit jedem geteilt werden, an den die Software weitergegeben wird. Aber das grundlegende und am meisten unterscheidende Konzept der GPL (sowohl GPLv2 als auch GPLv3) ist die Selbstweitergabe: Die GPL-Lizenz gilt für alle abgeleiteten Werke, d.h. andere Software wie Anwendungen, die die GPL-Software einbeziehen, z.B. durch Verlinkung mit GPL-Bibliotheken. Um es auf den Punkt zu bringen: Wenn Ihre Anwendung mit GPL-Software verlinkt oder sie auf andere Weise einbezieht, dann sind Sie möglicherweise verpflichtet, Ihre Quellen zu teilen.

Anwendung vs. Treiber

Auf einem Linux-System sind Treiber im Allgemeinen Komponenten, die mit dem Linux-Kernel kompiliert werden, und sie unterliegen zwangsläufig der GPL. Wenn Sie einen Treiber für Linux schreiben, müssen Sie möglicherweise Ihre Quellen freigeben, so wie es alle großen Silizium-Anbieter tun (NXP, TI, Intel, etc.). Es gibt einige Anbieter, die Kernel-Module in binärer Form vertreiben (hauptsächlich für kryptographische Geräte und andere sehr sensible Hardware), aber der rechtliche Status dieser unfreien Treiber ist nicht geklärt.

In jedem Fall hat die Mehrheit der Peripheriegeräte keine ernsthaften IP-Probleme auf der Ebene der Busschnittstelle, auf der die Treibersoftware arbeitet. Wenn Hardware-Geräte wertvolles IP enthalten, wird es häufig in der Firmware innerhalb des Geräts verwaltet und ist für Treiber nicht über eine Busschnittstelle zugänglich. Eine Anwendung hingegen arbeitet auf der Userspace-Ebene: Sie kann mit dem Linux-Kernel kommunizieren (über Systemaufrufe durch Bibliotheken), aber es ist weithin akzeptiert, dass Anwendungen keine Lizenzabhängigkeit mit dem Linux-Kernel haben.

Open-Source-Bibliotheken

C/C++-Anwendungen müssen in der Regel mit öffentlich verfügbaren Bibliotheken verknüpft werden, um auf Systemfunktionen zuzugreifen und zu vermeiden, dass das Rad neu erfunden wird. (Ein C-Programm, das Bluetooth verwendet, muss z. B. libbluetooth linken, das Teil des BlueZ-Stacks ist und unter der GPL lizenziert ist). Da viele Systembibliotheken unter GNU/Linux unter der GPL lizenziert sind, kann die Anwendung GPL-Verpflichtungen eingehen, indem sie mit ihnen gelinkt wird.

Statische vs. dynamische Verknüpfung

Es ist ein weit verbreiteter Glaube, dass dynamisches Linken (statt statisch) die Anwendung vor der Vererbung der GPL schützt, aber tatsächlich ist dies eine Kontroverse, die vor Gericht nicht vollständig geklärt wurde. Die FSF (Free Software Foundation, verbunden mit GNU) behauptet, dass die GPL sich auf dynamisch gelinkten Code erstreckt: https://www.gnu.org/licenses/gpl-faq.en.html#GPLStaticVsDynamic.

Kommunikation zwischen Prozessen

Andererseits müssen C/C++-Anwendungen nicht mit jeder Systembibliothek verknüpft werden. Viele Anwendungen kommen auch ohne libbluetooth oder andere GPL-lizensierte Bibliotheken zurecht. Es besteht keine GPL-Verpflichtung für die Anwendung, wenn sie keine GPL-lizenzierte Software einbindet, selbst wenn sie in einer GNU-Umgebung läuft. Wenn eine Anwendung Interprozesskommunikation mit GPL-Komponenten durchführt (z. B. DBus zur Kommunikation mit systemd oder anderen Daemon-Prozessen verwendet), wird allgemein akzeptiert, dass dies keine GPL-Verpflichtung für die Anwendung bedeutet.

Standard-C-Bibliothek

Die eine Bibliothek, mit der praktisch jede C-Anwendung verknüpft werden muss, ist die Standard-C-Bibliothek: Die häufigste Implementierung unter Linux ist die GNU glibc. Auch wenn es alternative C-Bibliotheken für eingebettete Linux-Systeme gibt, die permissive Lizenzen haben (wie z.B. uclibc oder musl), gibt es keinen wirklichen Grund für Entwickler proprietärer Anwendungen, die GNU C-Bibliothek aufgrund der Lizenz zu meiden: weil sie nicht unter der GPL steht. Die GNU C-Bibliothek ist eigentlich unter der LGPL lizenziert: der wichtigste praktische Unterschied zwischen den beiden ist, dass die LGPL ("Limited GPL") explizit dynamisches Linken erlaubt: wenn Ihre Anwendung glibc dynamisch (nicht statisch) verlinkt, gehen Sie keine Verpflichtung ein, Ihre Quellen zu teilen.

Python und andere Programmiersprachen

Was ist mit anderen Sprachen? Wenn Ihr Code nicht in C geschrieben ist, können Sie die GPL umgehen, weil Sie nicht auf GPL-Bibliotheken verlinken? Zum Beispiel hat der Python-Interpreter seine eigene permissive Open-Source-Lizenz. Sie schreibt nicht vor, dass man die Quellen freigeben muss. Aber die Python-Lizenz ist auch mit der GPL kompatibel. Wenn Sie ein Python-Skript schreiben und weitergeben und nur Python-Bibliotheken importieren, die nicht unter der GPL stehen, können Sie die Verpflichtungen der GPL umgehen. Auf der anderen Seite sind einige Python-Bibliotheken unter der GPL lizenziert. (Zum Beispiel, wenn sie von zugrundeliegenden GNU C-Bibliotheken abhängen, so dass sich die GPL auf die Python-Bibliothek überträgt.) Wie sich herausstellt, ist der Fall für eine Python-Anwendung dem von C/C++ sehr ähnlich.

Zum Mitnehmen

Proprietäre, Closed-Source-Anwendungen können auf einem GNU/Linux-System mit GPL-Softwarekomponenten koexistieren. Da der rechtliche Status des dynamischen Linkens unter der GPL nach wie vor umstritten ist, besteht ein sicherer Weg, um nicht versehentlich GPL-Verpflichtungen einzugehen, darin, sicherzustellen, dass Ihre Anwendung weder mit GPL-Software verlinkt noch diese direkt "einbaut". Dies kann bedeuten, daß Sie nach Alternativen für bestimmte C- oder Python-Bibliotheken suchen müssen. Die GNU Standard C Bibliothek selbst gehört jedoch nicht dazu, da sie nur unter einer LGPL-Lizenz steht. Es gibt viele andere GPL-lizensierte Komponenten, die auf einem Linux-System laufen, aber es ist allgemein anerkannt, dass diese ihre Lizenz nicht an eine Anwendung weitergeben, deren Code nicht von ihnen abgeleitet ist.

Unser Team kann Designberatung, komplette Hardware-Design- und Anwendungsentwicklungsdienste, Zertifizierungsunterstützung und mehr anbieten. Kontaktieren Sie uns, um das Gespräch zu beginnen.

Erfahren Sie mehr über Digi Wireless Design Services
Download der Wireless Design Services Broschüre

Verwandte Inhalte

Was ist ein Embedded-Betriebssystem? Was ist ein Embedded-Betriebssystem? Ein Embedded-Betriebssystem ist das Gehirn eines Produkts. Es wird entwickelt und optimiert, um die Effizienz der Steuerung zu verbessern... BLOG LESEN Verwendung des Digi ConnectCore Smart IOmux Tools für das Design mit SOMs der ConnectCore 8 Familie Verwendung des Digi ConnectCore Smart IOmux Tools für das Design mit SOMs der ConnectCore 8 Familie Digi International bietet eine Reihe von Embedded System-on-Modulen für die Entwicklung von Produktdesigns an. Zur Vereinfachung der Aufgaben... VIDEO ANSEHEN Machine Learning Demo mit Digi ConnectCore und ByteSnap SnapUI Machine Learning Demo mit Digi ConnectCore und ByteSnap SnapUI Digi International und ByteSnap Design arbeiteten zusammen, um eine interessante und unterhaltsame Demo mit einem Piratenspiel zu entwickeln... VIDEO ANSEHEN Bausteine für eingebettete Sicherheit Bausteine für eingebettete Sicherheit Entwickler können sich auf Digi TrustFence für integrierte Sicherheit verlassen, ohne Funktionen von Grund auf neu entwerfen zu müssen. ANSEHEN PDF Kundenspezifische Gateways und Router: Wann, Warum und Wie Kundenspezifische Gateways und Router: Wann, Warum und Wie Die Entwicklung eines benutzerdefinierten Gateways oder Routers für eine IoT-Anwendung kann unter bestimmten Umständen der richtige Ansatz sein, z. B. wenn... BLOG LESEN Verwenden Sie Gerätebaum-Overlays, um Ihren Gerätebaum zu patchen Verwenden Sie Gerätebaum-Overlays, um Ihren Gerätebaum zu patchen Der Gerätebaum-Überlagerungsmechanismus in Digi Embedded Yocto 3.0 macht es viel einfacher, Ihren ursprünglichen Gerätebaum mit kleinen Änderungen zu reparieren. Dieser Artikel teilt die Methodik ANSEHEN-FÜHRER Vereinfachen und beschleunigen Sie Ihre Entwicklung mit Digi ConnectCore i.MX-basierten SOMs Vereinfachen und beschleunigen Sie Ihre Entwicklung mit Digi ConnectCore i.MX-basierten SOMs Die Entwicklung eines IoT-Produkts ist eine Herausforderung, und deshalb scheitert ein großer Prozentsatz der Embedded-Design-Projekte an der... AUFGEZEICHNETES WEBINAR Digi Wireless Design Dienstleistungen Digi Wireless Design Dienstleistungen Digi Wireless Design Services bietet ein komplettes Angebot an Beratungs-, Design- und Entwicklungsdienstleistungen für IoT-Produkte... VIDEO ANSEHEN Eingebettetes Rechnen: Design for Ease of Manufacturing und Low Cost-of-Ownership Eingebettetes Rechnen: Design for Ease of Manufacturing und Low Cost-of-Ownership Der Markt für eingebettete System-on-Module (SOMs) ist gewachsen und bietet vielfältige Optionen für Anwendungen, die von Displays im Einzelhandel bis hin... BLOG LESEN Maschinelles Lernen und maschinelles Sehen funktionieren besser mit Echtzeit-Edge-Verarbeitung Maschinelles Lernen und maschinelles Sehen funktionieren besser mit Echtzeit-Edge-Verarbeitung Zu den vielversprechendsten komplementären Technologien gehören heute maschinelles Lernen (ML) und maschinelles Sehen (MV). Maschinelles Lernen... BLOG LESEN Digi ConnectCore 8M Nano: Entwickler-Ressourcen, Sicherheit, Skalierbarkeit Digi ConnectCore 8M Nano: Entwickler-Ressourcen, Sicherheit, Skalierbarkeit Digi International gab kürzlich die Verfügbarkeit des Digi ConnectCore 8M Nano Development Kit bekannt. Das Digi ConnectCore® 8M... BLOG LESEN Evoqua Digi WDS unterstützt Evoqua bei der Bereitstellung einer internetfähigen Wasserüberwachungslösung für kommerzielle Anwendungen Um die Kosten zu senken, die Effizienz zu steigern und die Kunden besser zu bedienen, hat sich Evoqua Water Technologies dem IoT zugewandt, um... GESCHICHTE LESEN Vium Vium verbessert den Erfolg der Medikamentenentwicklung für Pharma- und Biotech-Unternehmen Vium hilft Laboren, die Sicherheit zu erhöhen, ihre Fähigkeit zu verbessern, Wirkstoffe zu testen und relevante Krankheits-Biomarker besser zu identifizieren... GESCHICHTE LESEN Digi ConnectCore 8X Digi ConnectCore 8X Intelligentes und vernetztes Embedded System-on-Module auf Basis des NXP i.MX 8X, mit skalierbarer Dual-/Quad-Core-Leistung für industrielle IoT-Anwendungen ANSEHEN PRODUKT