Open Source in Neverlag
Neverlag spielt Video mit dem mpv-Stapel: mpv, FFmpeg, libplacebo und den Untertitel-Bibliotheken darum herum. Der grösste Teil steht unter der GNU Lesser General Public License (LGPL) 2.1 oder neuer. Diese Seite ist der Hinweis, den die LGPL verlangt: welche Komponenten in der App stecken, in welchen Versionen genau, wo ihr Quellcode liegt, was wir geändert haben, wie wir bauen, wie du die Bibliothek austauschen kannst — und unser schriftliches Angebot, den Quellcode zu liefern.
Neverlag selbst — die App, ihre Oberfläche und alles ausserhalb des Medien-Frameworks — ist nicht Open Source. Die hier aufgeführten Bibliotheken sind es und bleiben unter ihren eigenen Lizenzen. Die Lizenztexte stehen in der App unter Einstellungen → Über Neverlag → Rechtliches → Open-Source-Lizenzen, unverändert aus den Quellpaketen.
Komponenten
Versionen wie im Build festgelegt (Vendor/build-scripts/versions.env im Neverlag-Repository). Jeder Quellcode-Link zeigt auf genau diese Version; die Prüfsumme ist der SHA-256 des Release-Archivs, aus dem wir bauen, oder der Commit des Tags.
| Komponente | Version | Lizenz | Plattformen | Rolle in Neverlag | Quellcode |
|---|---|---|---|---|---|
| mpv (libmpv) | 0.41.0 | LGPL-2.1-or-later | alle | Wiedergabekern: Demuxing, Dekodierung, Takt, Untertitel, Render-API. Gebaut mit Neverlag-Änderungen (Patch unten). | mpv (libmpv) 0.41.0 SHA-256 ee21092a5ee427353392360929dc64645c54479aefdb5babc5cfbb5fad626209 |
| FFmpeg | 8.0.3 | LGPL-2.1-or-later | alle | Container, Protokolle, Decoder (libavformat, libavcodec, libavfilter, libswscale, libswresample, libavutil). Strikte LGPL-Konfiguration, keine GPL- oder Non-free-Teile. | FFmpeg 8.0.3 SHA-256 6136812ea6d4e68bdba27e33c2a94382711cdf4f8602ffef056ff792bd6f9818 |
| libplacebo | 7.360.1 | LGPL-2.1-or-later | alle | GPU-Videoverarbeitung für mpv (Farbmanagement, Skalierung, Tone-Mapping). Als Git-Klon mit Submodulen; OpenGL auf Mac, iPhone und iPad, CPU-Pfad auf Apple TV. | libplacebo 7.360.1 Commit cee9b076f2c63104ccfd497fa79c39a867293ec4 |
| glad Teil von libplacebo | 2.0.8 | MIT | Mac, iPhone / iPad | OpenGL-Funktionslader, im libplacebo-Build erzeugt. | glad 2.0.8 Commit 73db193f853e2ee079bf3ca8a64aa2eaf6459043 |
| fast_float Teil von libplacebo | 8.2.2 | MIT | alle | Header-only-Zahlenparser, von libplacebo verwendet. | fast_float 8.2.2 Commit 97b54ca9e75f5303507699d27c6b4f4efe4641a1 |
| libass | 0.17.3 | ISC | alle | Untertitel-Rendering (ASS/SSA, Textuntertitel). | libass 0.17.3 SHA-256 eae425da50f0015c21f7b3a9c7262a910f0218af469e22e2931462fed3c50959 |
| FreeType | 2.13.3 | FTL | alle | Schrift-Rasterung für Untertitel. | FreeType 2.13.3 SHA-256 0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289 |
| FriBidi | 1.0.16 | LGPL-2.1-or-later | alle | Bidirektionaler Text (Arabisch, Hebräisch) in Untertiteln. | FriBidi 1.0.16 SHA-256 1b1cde5b235d40479e91be2f0e88a309e3214c8ab470ec8a2744d82a5a9ea05c |
| HarfBuzz | 10.1.0 | MIT | alle | Text-Shaping für Untertitel. | HarfBuzz 10.1.0 SHA-256 6ce3520f2d089a33cef0fc48321334b8e0b72141f6a763719aaaecd2779ecb82 |
| GRDB.swift | 7.11.1 | MIT | alle | SQLite-Zugriff für Katalog und Programmführer (Swift-Paket, nicht Teil des Medien-Frameworks). | GRDB.swift 7.11.1 |
Wie die Bibliotheken eingebunden sind — und wie du sie austauschst
Die Bibliotheken (mpv, FFmpeg, libplacebo, FriBidi und die übrigen aus der Tabelle) sind zu einem Medien-Framework gebaut, das als eigene Datei im App-Bundle liegt (Ordner Frameworks) und beim Start der App geladen wird. Die App spricht es über die öffentliche libmpv-API an (client.h, render.h, stream_cb.h und das durch unseren Patch ergänzte render_cb.h) sowie über die unten genannten FFmpeg-Header.
Weil das Framework eine eigene, dynamisch geladene Datei ist, kannst du es durch einen eigenen Build ersetzen — eine andere mpv-Version, deine eigene FFmpeg-Konfiguration, ein gepatchtes libplacebo —, solange die Schnittstelle gleich bleibt (LGPL 2.1 §6 b). Baue es aus den Quellen und Flags dieser Seite, signiere es mit deinem eigenen Zertifikat und setze es an die Stelle des mitgelieferten Frameworks (Libmpv.framework — auf dem Mac liegt es zweimal: in der App, die libavformat für Aufnahmen nutzt, und im Wiedergabe-Dienst PlaybackService.xpc, der mpv ausführt; beide ersetzen). Auf dem Mac ist das alles; auf iPhone, iPad und Apple TV verlangt die Plattform zusätzlich, dass das ganze App-Bundle mit deinem eigenen Entwicklerzertifikat neu signiert wird — eine Regel von Apples Plattform, nicht dieser Lizenz.
Neverlag enthält nicht den mpv-Player, nur libmpv: keine Kommandozeile, kein Lua- oder JavaScript-Scripting, keine GPL-Teile. FFmpeg ist strikt LGPL konfiguriert (--disable-gpl --disable-nonfree --disable-version3), mpv mit -Dgpl=false.
Was Neverlag geändert hat
FFmpeg, libplacebo, libass, FreeType, FriBidi und HarfBuzz werden aus den unveränderten Release-Archiven gebaut. mpv bauen wir mit den folgenden Änderungen, veröffentlicht als ein Patch gegen das Release-Tarball:
- meson.build: osdep/utils-mac.c auf Apple-Plattformen auch ohne Cocoa mitkompilieren, weil die CoreAudio- und AudioUnit-Ausgaben dessen String-Hilfen brauchen. Alle Plattformen.
- meson.build: den VideoToolbox-GL-Hardwaredekodierpfad gegen einfaches OpenGL bauen lassen statt die Cocoa- oder iOS-GL-Backends zu verlangen. Nur Mac.
- Ein neues libmpv-Render-Backend «cb» (include/mpv/render_cb.h, video/out/libmpv_cb.c, Option -Dlibmpv-cb): Es reicht den dekodierten Frame ohne Kopie an die App weiter, statt ihn zu rendern. Auf dem Apple TV und auf iPhone / iPad eingeschaltet.
neverlag-mpv-changes.patch — Download: neverlag-mpv-changes.patch (mpv 0.41.0, Unified Diff, anwendbar mit patch -p1). Die Änderungen stehen wie die berührten Dateien unter LGPL 2.1 oder neuer.
Wie wir bauen
Alle Bibliotheken werden mit Apples clang aus Xcode für arm64 kompiliert (Mac zusätzlich x86_64), Deployment-Targets macOS 14.0, iOS 17.0, tvOS 17.0. TLS läuft über das System (SecureTransport); kein OpenSSL, GnuTLS oder Mbed TLS ist gelinkt. Die Flags unten sind die aus den Build-Skripten; mit einer Plattform markierte Zeilen gelten nur dort.
FFmpeg
./configure --enable-static --disable-shared --enable-pic --pkg-config-flags=--static
--disable-autodetect --disable-gpl --disable-nonfree --disable-version3
--enable-videotoolbox --enable-audiotoolbox
--disable-doc --disable-programs --disable-avdevice
--enable-protocol=file,http,https,tcp,tls,crypto,hls
--enable-demuxer=mpegts,hls,mov,matroska,mpegps,flv
--enable-decoder=h264,hevc,mpeg2video,mpeg4,vp9,av1
--enable-decoder=aac,ac3,eac3,mp2,mp3,opus,flac
--enable-zlib --enable-securetransport # iPhone / iPad
--enable-cross-compile --target-os=darwin --arch=arm64 --sysroot=<iPhoneOS SDK># Apple TV
--enable-cross-compile --target-os=darwin --arch=arm64 --sysroot=<AppleTVOS SDK># Mac
(x86_64 slice: --enable-cross-compile --target-os=darwin --arch=x86_64) Keine GPL- oder Non-free-Teile (kein libx264, libx265, libfdk-aac). Der Build bricht ab, wenn config.h nicht CONFIG_GPL 0 enthält.
mpv (libmpv)
meson setup --default-library static --buildtype release
-Dlibmpv=true -Dcplayer=false -Dgpl=false -Dtests=false
-Dcocoa=disabled -Dswift-build=disabled -Dmacos-cocoa-cb=disabled
-Dmacos-media-player=disabled -Dmacos-touchbar=disabled -Davfoundation=disabled
-Dlua=disabled -Djavascript=disabled -Duchardet=disabled -Dzimg=disabled -Djpeg=disabled
-Dlibarchive=disabled -Dlibbluray=disabled -Drubberband=disabled -Dvapoursynth=disabled
-Dmanpage-build=disabled -Dhtml-build=disabled # Mac
-Dplain-gl=enabled -Dvideotoolbox-gl=enabled# iPhone / iPad
-Dlibmpv-cb=enabled -Dplain-gl=enabled -Dios-gl=enabled
-Dvideotoolbox-gl=disabled -Dvideotoolbox-pl=disabled
-Daudiounit=enabled -Dcoreaudio=disabled# Apple TV
-Dlibmpv-cb=enabled -Dgl=disabled -Dplain-gl=disabled -Dios-gl=disabled
-Dvideotoolbox-gl=disabled -Dvideotoolbox-pl=disabled
-Daudiounit=enabled -Dcoreaudio=disabled Quellbaum = Release-Tarball + neverlag-mpv-changes.patch (siehe oben). -Dgpl=false wählt den LGPL-Build von mpv.
libplacebo
meson setup --default-library static --buildtype release
-Dvulkan=disabled -Dd3d11=disabled -Dshaderc=disabled -Dglslang=disabled
-Dlcms=disabled -Dlibdovi=disabled -Ddemos=false -Dtests=false # Mac
-Dopengl=enabled# iPhone / iPad
-Dopengl=enabled# Apple TV
-Dopengl=disabled xxHash findet der Build nicht (pkg-config ist auf den Build-Prefix begrenzt); libplacebo nutzt sein eingebautes SipHash (Public Domain).
libass
./configure --disable-shared --enable-static --disable-fontconfig FreeType
meson setup --default-library static --buildtype release
-Dharfbuzz=disabled -Dbrotli=disabled -Dbzip2=disabled -Dpng=disabled -Dzlib=system -Dtests=disabled FriBidi
meson setup --default-library static --buildtype release -Ddocs=false -Dtests=false -Dbin=false HarfBuzz
meson setup --default-library static --buildtype release
-Dfreetype=enabled -Dglib=disabled -Dgobject=disabled -Dcairo=disabled -Dicu=disabled
-Dtests=disabled -Ddocs=disabled -Dintrospection=disabled -Dutilities=disabled # Mac
-Dcoretext=enabled# iPhone / iPad
-Dcoretext=enabled# Apple TV
-Dcoretext=disabled Libmpv.framework (packaging)
libtool -static -o libmpv-full.a libmpv.a libplacebo.a libass.a libharfbuzz.a libfribidi.a libfreetype.a
libavformat.a libavcodec.a libavfilter.a libswscale.a libswresample.a libavutil.a
clang -dynamiclib -Wl,-all_load libmpv-full.a -install_name @rpath/Libmpv.framework/Libmpv
-compatibility_version 1 -current_version 1 -Wl,-dead_strip
-Wl,-exported_symbols_list Libmpv.exports # _mpv_* _av* _sws_* _swr_* _swscale_* _swresample_*
-lz -liconv -lc++ -framework VideoToolbox -framework AudioToolbox -framework CoreAudio
-framework CoreMedia -framework CoreVideo -framework CoreText -framework CoreGraphics
-framework Security -framework IOSurface -framework CoreFoundation # Mac
-arch arm64 -arch x86_64 -mmacosx-version-min=<macOS target> -framework OpenGL
install_name @rpath/Libmpv.framework/Versions/A/Libmpv (versioned bundle)# iPhone / iPad
-target arm64-apple-ios<iOS target> -framework OpenGLES -framework AVFoundation -framework UIKit# Apple TV
-target arm64-apple-tvos<tvOS target> -framework AVFoundation -framework UIKit Vendor/build-scripts/make-framework.sh: Die statischen Archive werden je Plattform zu einer dynamischen Bibliothek gelinkt (Mach-O dylib, install name @rpath/Libmpv.framework/…), mit Headern, Modulmap (Module Libmpv und Libmpv.CFFmpeg) und Info.plist als Libmpv.framework verpackt und zu Libmpv.xcframework zusammengesetzt. Xcode bettet es ins App-Bundle ein (Frameworks/) und signiert es. Exportiert wird nur die öffentliche C-API.
Schriftliches Angebot (Quellcode)
Für mindestens drei Jahre ab dem Tag, an dem du deine Kopie von Neverlag erhalten hast, gibt die axiena AG jedem Dritten auf Anfrage den vollständigen, maschinenlesbaren Quellcode der LGPL-lizenzierten Bibliotheken in genau den Versionen, die die App enthält — einschliesslich aller Neverlag-Änderungen (Patch oben) sowie der Skripte und Konfiguration, mit denen sie gebaut werden — gegen höchstens die Kosten, die uns diese Weitergabe verursacht. Dieses Angebot erfolgt nach Ziffer 4 und Ziffer 6 c der GNU Lesser General Public License 2.1.
Schreib an support@neverlag.app oder info@axiena.ch und nenne App-Version und Plattform (Einstellungen → Über Neverlag). Du erhältst Download-Links zu den Archiven; wenn du einen Datenträger bevorzugst, schicken wir ihn zum Selbstkostenpreis.
axiena AG
Einsiedlerstrasse 535
8810 Horgen, Schweiz
support@neverlag.app · info@axiena.ch
Weiteres Material Dritter
libass (ISC), FreeType (FreeType License), HarfBuzz (MIT), glad (MIT), fast_float (MIT) und GRDB.swift (MIT) verlangen, dass ihre Lizenz- und Urheberrechtshinweise mitgeliefert werden; sie stehen in der App unter Open-Source-Lizenzen.
Die Demo-Kanäle spielen Ausschnitte und Trailer der Blender Open Movies, © Blender Foundation, lizenziert unter Creative Commons Attribution (CC BY 2.5 und 3.0), für den Demo-Modus neu kodiert und teilweise gekürzt.