From patchwork Mon Jan 26 19:01:41 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 25969 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 64276C3200 for ; Mon, 26 Jan 2026 19:01:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 17C3B61FC9; Mon, 26 Jan 2026 20:01:52 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="wKvy3IMR"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 51F9961A35 for ; Mon, 26 Jan 2026 20:01:47 +0100 (CET) Received: from pendragon.ideasonboard.com (2001-14ba-703d-e500--2a1.rev.dnainternet.fi [IPv6:2001:14ba:703d:e500::2a1]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 94F211AE2 for ; Mon, 26 Jan 2026 20:01:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1769454071; bh=xC5Ps4nn24E9cC02PUx4CpNFDZy8mobPtSh+0Zpgnbk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=wKvy3IMRA0SKmjn/IijAuNdQQXkBrTEI3twAySRDWnzFDGC3svTT53l0X9CZUVhL/ Jrho+NyDeoSHDSja1BP4HQggQIFWCrveWOcyI0lwmv5h2iUxqIa9sSioR4IvVaEJ49 HpUU3ltNYscn1kRDer0kB+7IiJIwkIrKaPzNjVCw= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Subject: [RFC/PATCH 3/3] Documentation: architecture: Detail policy on dependencies Date: Mon, 26 Jan 2026 21:01:41 +0200 Message-ID: <20260126190141.2410546-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260126190141.2410546-1-laurent.pinchart@ideasonboard.com> References: <20260126190141.2410546-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" libcamera has a policy on usage of 3rd party components that has never been documented. Detail it in the architecture documentation page, with an explicit description of the licensing requirements. Signed-off-by: Laurent Pinchart --- Documentation/libcamera_architecture.rst | 41 +++++++++++++++++------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/Documentation/libcamera_architecture.rst b/Documentation/libcamera_architecture.rst index 73888e499128..417ecf02c5f3 100644 --- a/Documentation/libcamera_architecture.rst +++ b/Documentation/libcamera_architecture.rst @@ -112,18 +112,19 @@ Image Processing Algorithms and control hardware image processing based on the parameters supplied by upper layers, closing the control loop of the ISP. - IPAs are loaded as external plugins named IPA Modules. IPA Modules can be part - of the libcamera code base or provided externally by camera vendors as - open-source or closed-source components. + IPAs are loaded as external plugins named IPA Modules. IPA Modules can be + part of the libcamera code base or provided externally by camera vendors. + In-tree IPA modules are covered by the same license as the rest of libcamera, + external IPA modules can be open-source or closed-source. - Open source IPA Modules built with libcamera are run in the same process space - as libcamera. External IPA Modules are run in a separate sandboxed process. In - either case, they can only interact with libcamera through the API provided by - the Pipeline Handler. They have a restricted view of the system, with no direct - access to kernel camera devices, no access to networking APIs, and limited - access to file systems. All their accesses to image and metadata are mediated - by dmabuf instances explicitly passed by the Pipeline Handler to the IPA - Module. + IPA Modules built with libcamera are run in the same process space as the + library. External IPA Modules are run in a separate sandboxed process. In + either case, they can only interact with libcamera through the API provided + by the Pipeline Handler. They have a restricted view of the system, with no + direct access to kernel camera devices, no access to networking APIs, and + limited access to file systems. All their accesses to image and metadata are + mediated by dmabuf instances explicitly passed by the Pipeline Handler to the + IPA Module. IPA Modules are only required for platforms and devices with an ISP controlled by the host CPU. Camera sensors which have an integrated ISP are not @@ -141,3 +142,21 @@ Helpers and Support Classes self-contained support classes, even if such code is present only once in the code base, in order to keep the source code clean and easy to read. This should be the case for instance for plugin management. + +Dependencies +------------ + +As a system component, libcamera tries to minimize its dependency on +third-party libraries. New dependencies are evaluated on a case-by-case basis, +to balance the value they bring with the impact on distributions. Dependencies +for optional features must be conditioned by a meson feature option, as usage +of dependencies based only on auto-detection hinders reproducible builds and +dependency management for distributions. All dependencies must be compatible +with the libcamera license. + +Dependencies may not be used to load closed-source components from pipeline +handlers or in-tree IPA modules. This includes GPU shaders or neural network +models. Usage of closed-source components is permitted in external IPA Modules +only. Pipeline handlers and in-tree IPA Modules are allowed to use neural +networks provided that both the model and its training data are available under +an open-source license compatible with libcamera.