PrismCore / Project

Licensing

PrismCore is licensed under the GNU Lesser General Public License 2.1 or later with an Application Store Exception. What that means, in the words of its LICENSE and NOTICE files.

PrismCore is Copyright © 2026 Václav Zmrhal and licensed under the GNU Lesser General Public License, version 2.1 or (at your option) any later version, with an Application Store Exception. The authoritative texts are LICENSE and NOTICE.md in the repository; this page summarises them and does not replace them.

The Application Store Exception

LGPL section 6 asks that users of a work built on PrismCore be able to relink it against a modified PrismCore. A signed app from a store cannot allow that. The exception releases you from those section 6 requirements for store distribution only — the Apple App Store, TestFlight, the Mac App Store or any comparable store whose terms are incompatible with section 6.

It comes with two conditions:

  1. It covers the use of PrismCore in a larger work, not PrismCore itself. If you modify PrismCore, the modified library remains under the LGPL in full, and you must make your modifications available under it.
  2. You must give notice, somewhere a user of your work can find it (an About screen, an acknowledgements page, or the accompanying documentation), that your work incorporates PrismCore, along with a copy of the License and a reference to where PrismCore's source can be obtained.

The exception applies to PrismCore's own code only. It does not extend to FFmpeg or any other third-party component. If you would rather not rely on it, the LGPL applies on its own terms, unmodified.

The full text of the exception, from LICENSE:

APPLICATION STORE EXCEPTION

As a special exception to the terms of the GNU Lesser General Public License
version 2.1, the copyright holder of PrismCore grants you permission to convey
a combined work that incorporates PrismCore through an application
distribution channel — the Apple App Store, TestFlight, the Mac App Store, or
any comparable store — whose terms of service are incompatible with the
requirements of section 6 of that License, notwithstanding those requirements.

Concretely, and only for such distribution, you are released from section 6's
requirements that the terms of your combined work permit modification of that
work for the customer's own use and reverse engineering for debugging such
modifications, and from section 6's requirement to accompany the work with the
material that would let a recipient relink it against a modified PrismCore.

This exception is subject to two conditions:

  1. It covers the *use* of PrismCore in a larger work. It does not cover
     PrismCore itself: if you modify PrismCore, the modified library remains
     subject to the Lesser General Public License in full, and you must make
     your modifications available under that License.

  2. You must give notice, in a place a user of your work can find (an About
     screen, an acknowledgements page, or the accompanying documentation),
     that your work incorporates PrismCore, along with a copy of this License
     and a reference to where PrismCore's source can be obtained.

This exception applies to PrismCore's own code only. It does not extend to
FFmpeg or to any other third-party component. FFmpeg reaches an adopting
application as dynamically linked frameworks under the plain Lesser General
Public License — see NOTICE.md for what that asks of you, which is the same
thing it already asks of every FFmpeg-based application on those stores.

If you would rather not rely on this exception, the Lesser General Public
License below applies on its own terms, unmodified.

In practice

A closed-source app, including on the App Store: add the package, use it, ship it. Two things are asked of you in return: if you modify PrismCore itself, publish those modifications under the LGPL; and give notice in your app — an About screen, an acknowledgements page or the documentation — that it incorporates PrismCore, with a copy of the License and where PrismCore's source can be obtained. Aether's About screen is a worked example.

FFmpeg is a separate obligation. FFmpeg reaches your app as dynamically linked frameworks (supplied by MPVKit) under the plain LGPL-2.1-or-later. Ship the licence texts, say which versions you used, and keep the FFmpeg libraries replaceable — embedding the frameworks dynamically, which is how MPVKit delivers them, is what satisfies that. If you already ship MPVKit, you are already doing it.

Third-party components

ComponentLicenceHow it is used
FFmpegLGPL-2.1+libavformat, libavcodec, libavutil, libswresample and libswscale — demuxing, muxing and the software decode path
MPVKitLGPL-3.0Supplies the above as prebuilt dynamic xcframeworks
libdoviMITDolby Vision RPU parsing and the Profile 7 → 8.1 conversion

No FFmpeg source is redistributed in the PrismCore repository. The binaries arrive through MPVKit, which is where their corresponding sources and build recipes live.

Why LGPL rather than a permissive licence

PrismCore links FFmpeg dynamically, which alone would have left its own code free to carry any licence. But Sources/PrismCore/Remux/EAC3Syncframe.swift — the E-AC-3 bitstream walk that finds the Atmos signal — was written by reading FFmpeg's libavcodec/ac3_parser.c, field order and widths included, because the placement of the JOC signal in addbsi could not be derived reliably from the specification alone. That file is realistically a derivative of LGPL-2.1+ code, so LGPL-2.1-or-later is the honest licence for it, and applying it to the whole package keeps the boundary somewhere a reader can find it.