[{"id":37630,"web_url":"https://patchwork.libcamera.org/comment/37630/","msgid":"<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","date":"2026-01-14T08:45:17","subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 01. 14. 6:29 keltezéssel, Kieran Bingham írta:\n> Changes between releases may require updates to user applications\n> and ABI changes will require a recompilation of applications.\n> \n> Track changes which have an impact on the ABI or API to support\n> users migrating to a newer release.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n\nI was under the impression that we want to make this part of the documentation?\nIn a kind of \"version history\" / \"release notes\" style.\n\nI actually quite like how meson does this[0]. And in the repository, they have a folder[1]\nthat contains every release note chunk. When a release is made, these files are merged\ntogether into a final \"Release-notes-for-X.Y.Z.md\". And additionally, release notes for\nthe development version can also be generated easily.\n\nThoughts?\n\n[0]: https://mesonbuild.com/Release-notes.html\n[1]: https://github.com/mesonbuild/meson/tree/master/docs/markdown/snippets\n[2]: https://github.com/mesonbuild/meson/blob/master/docs/genrelnotes.py\n\n\n>   ABI | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++\n>   1 file changed, 50 insertions(+)\n>   create mode 100644 ABI\n> \n> diff --git a/ABI b/ABI\n> new file mode 100644\n> index 000000000000..f2772402225f\n> --- /dev/null\n> +++ b/ABI\n> @@ -0,0 +1,50 @@\n> +# ABI/API Compatibility log\n> +\n> +This file reports on ABI and API changes which occur between releases.\n> +\n> +The ABI can be checked and verified with the abi-checker tool. To report on the\n> +ABI and API compatibility of your local tree against the latest release, simply\n> +run:\n> +\n> + ./utils/abi-compat.sh\n> +\n> +To check the API and ABI compatibility of a single commit specify the previous\n> +commit as the start point:\n> +\n> + ./utils/abi-compat.sh $COMMIT^ $COMMIT\n> +\n> +## v0.7\n> +\n> +Commit: b7ed763f0dfb (\"libcamera: request: Make controls_ a class instance\")\n> + struct Request\n> +  - Size of this type has been changed from 80 bytes to 152 bytes.\n\nThe specific sizes are quite platform dependent, so I wouldn't list them.\n\n\n> +    The fields or parameters of such data type may be incorrectly initialized or\n> +    accessed by old client applications.\n> +\n> +  - Type of field controls_ has been changed from struct ControlList* (8 bytes)\n> +    to struct ControlList (80 bytes).\n> +    Size of the inclusive type has been changed.\n> +\n> + Impact:\n> +\n> +  The Request->controls() now has the ControlList allocated directly inside the\n> +  Request object. There is no API impact, but the change to the size and\n> +  offsets of the Request object is an ABI breakage and requires re-compilation\n> +  of users.\n> +\n> +\n> +Commit: dce2ef36f2ef (\"libcamera: request: Move metadata_ to Private\")\n> +  struct Request\n> +  - Size of this type has been changed from 88 bytes to 80 bytes.\n> +    The fields or parameters of such data type may be incorrectly initialized or\n> +    accessed by old client applications.\n> +\n> +  - Field metadata_ has been removed from this type.\n> +    Size of the inclusive type has been changed.\n> +\n> +  Impact:\n> +\n> +  The Request->metadata() usage now returns a const reference to the underlying\n> +  metadata control list. Users can not modify this data. The size and offsets\n> +  of the Request object is an ABI breakage and requires re-compilation of users.\n> +","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D0A8CBE08B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Jan 2026 08:45:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DBFB061FC3;\n\tWed, 14 Jan 2026 09:45:21 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 24FAE615B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Jan 2026 09:45:21 +0100 (CET)","from [192.168.33.18] (185.221.143.114.nat.pool.zt.hu\n\t[185.221.143.114])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 4942F316;\n\tWed, 14 Jan 2026 09:44:54 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"dQ3P8VWm\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768380294;\n\tbh=N18hKY0TzX/bT3WhGcJ8w0wIXWHcnKs5ynNwppupiBM=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=dQ3P8VWm80MuO8S+9xXBeU4XWBcLzBS9ZfWZATLE21RkzoWHPEN80FcbOCU0J/Yuu\n\tewfk97e6ZxgJjuyz5cXhT9sJakbxdLEltdPWMh644/5H8Opc0u1HpefD+AxWF+ciFp\n\tqfBTp87+0F/DKxRGovCauU9kDDJMimys3NrTlmcY=","Message-ID":"<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","Date":"Wed, 14 Jan 2026 09:45:17 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>","References":"<20260114052914.26432-1-kieran.bingham@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260114052914.26432-1-kieran.bingham@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":37632,"web_url":"https://patchwork.libcamera.org/comment/37632/","msgid":"<176838214563.1693075.14609231472783438095@ping.linuxembedded.co.uk>","date":"2026-01-14T09:15:45","subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2026-01-14 08:45:17)\n> 2026. 01. 14. 6:29 keltezéssel, Kieran Bingham írta:\n> > Changes between releases may require updates to user applications\n> > and ABI changes will require a recompilation of applications.\n> > \n> > Track changes which have an impact on the ABI or API to support\n> > users migrating to a newer release.\n> > \n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> \n> I was under the impression that we want to make this part of the documentation?\n> In a kind of \"version history\" / \"release notes\" style.\n\nYes - I thought this was a starting point for that. But you're right -\ninstead of a text file - it could go directly to the generated\ndocumentation.\n\n> I actually quite like how meson does this[0]. And in the repository, they have a folder[1]\n> that contains every release note chunk. When a release is made, these files are merged\n> together into a final \"Release-notes-for-X.Y.Z.md\". And additionally, release notes for\n> the development version can also be generated easily.\n> \n> Thoughts?\n> \n> [0]: https://mesonbuild.com/Release-notes.html\n> [1]: https://github.com/mesonbuild/meson/tree/master/docs/markdown/snippets\n> [2]: https://github.com/mesonbuild/meson/blob/master/docs/genrelnotes.py\n\nI already have a script to semi-automate releases and release notes - so\nindeed we could extend that with something like this!\n\nAre the snippets removed at release time to start again when they are\nmerged or such then ?\n\n\n \n> >   ABI | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++\n> >   1 file changed, 50 insertions(+)\n> >   create mode 100644 ABI\n> > \n> > diff --git a/ABI b/ABI\n> > new file mode 100644\n> > index 000000000000..f2772402225f\n> > --- /dev/null\n> > +++ b/ABI\n> > @@ -0,0 +1,50 @@\n> > +# ABI/API Compatibility log\n> > +\n> > +This file reports on ABI and API changes which occur between releases.\n> > +\n> > +The ABI can be checked and verified with the abi-checker tool. To report on the\n> > +ABI and API compatibility of your local tree against the latest release, simply\n> > +run:\n> > +\n> > + ./utils/abi-compat.sh\n> > +\n> > +To check the API and ABI compatibility of a single commit specify the previous\n> > +commit as the start point:\n> > +\n> > + ./utils/abi-compat.sh $COMMIT^ $COMMIT\n> > +\n> > +## v0.7\n> > +\n> > +Commit: b7ed763f0dfb (\"libcamera: request: Make controls_ a class instance\")\n> > + struct Request\n> > +  - Size of this type has been changed from 80 bytes to 152 bytes.\n> \n> The specific sizes are quite platform dependent, so I wouldn't list them.\n\nThey come directly from the abi-compat tool. Indeed, they'll be platform\nspecific - but I was trying to be as clear as possible about what the\nimpact was. Ideally perhaps the snippets could be automatically\ngenerated by the tooling too - so I'm probably not too concerned about\nthe specific numbers ... but reporting how it changes (size went up/\nsize went down) etc ... is probably helpful context ?\n\n\n> \n> > +    The fields or parameters of such data type may be incorrectly initialized or\n> > +    accessed by old client applications.\n> > +\n> > +  - Type of field controls_ has been changed from struct ControlList* (8 bytes)\n> > +    to struct ControlList (80 bytes).\n> > +    Size of the inclusive type has been changed.\n> > +\n\nThe impact section I wrote myself, as an example for showing what we\nmight say about a change - but the section above is the generated text\nfrom the tool reformatted.\n\n\n> > + Impact:\n> > +\n> > +  The Request->controls() now has the ControlList allocated directly inside the\n> > +  Request object. There is no API impact, but the change to the size and\n> > +  offsets of the Request object is an ABI breakage and requires re-compilation\n> > +  of users.\n> > +\n> > +\n> > +Commit: dce2ef36f2ef (\"libcamera: request: Move metadata_ to Private\")\n> > +  struct Request\n> > +  - Size of this type has been changed from 88 bytes to 80 bytes.\n> > +    The fields or parameters of such data type may be incorrectly initialized or\n> > +    accessed by old client applications.\n> > +\n> > +  - Field metadata_ has been removed from this type.\n> > +    Size of the inclusive type has been changed.\n> > +\n> > +  Impact:\n> > +\n> > +  The Request->metadata() usage now returns a const reference to the underlying\n> > +  metadata control list. Users can not modify this data. The size and offsets\n> > +  of the Request object is an ABI breakage and requires re-compilation of users.\n> > +\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8A5D1C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Jan 2026 09:15:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 54A0F61FBC;\n\tWed, 14 Jan 2026 10:15:50 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E2B7A615B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Jan 2026 10:15:48 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 17FD2316;\n\tWed, 14 Jan 2026 10:15:22 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"sgznv5dN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768382122;\n\tbh=4FQlzeizmNiO/jM8dkwO+L153sNTHU18/GZPwmxqDb0=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=sgznv5dNg4L9YmfB+eaSi6i+e5O8zxENNOLr+s7kgrCpnyx/lxHB0pDaZjPIkjslS\n\tM9w72xW6yz/pyPN12KmYS28JfTzVTcEV3waXF175hb1qC47SxvhaIpGTheyvVIFzd5\n\tM7VjhS86RizcZxJsOK9pu09YLe2Loq4GZbULvvAY=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","References":"<20260114052914.26432-1-kieran.bingham@ideasonboard.com>\n\t<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Wed, 14 Jan 2026 09:15:45 +0000","Message-ID":"<176838214563.1693075.14609231472783438095@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":37633,"web_url":"https://patchwork.libcamera.org/comment/37633/","msgid":"<176838217073.20276.17963256011840559047@localhost>","date":"2026-01-14T09:16:10","subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2026-01-14 09:45:17)\n> 2026. 01. 14. 6:29 keltezéssel, Kieran Bingham írta:\n> > Changes between releases may require updates to user applications\n> > and ABI changes will require a recompilation of applications.\n> > \n> > Track changes which have an impact on the ABI or API to support\n> > users migrating to a newer release.\n> > \n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> \n> I was under the impression that we want to make this part of the documentation?\n> In a kind of \"version history\" / \"release notes\" style.\n> \n> I actually quite like how meson does this[0]. And in the repository, they have a folder[1]\n> that contains every release note chunk. When a release is made, these files are merged\n> together into a final \"Release-notes-for-X.Y.Z.md\". And additionally, release notes for\n> the development version can also be generated easily.\n\nI also think it would be nice to have that as part of the documentation\n(and it should be updated for release v0.x during development). Maybe\nsplitting and adding tooling like meson does is an overkill for now? We\nmight risk to not get it in at all.\n\n> \n> Thoughts?\n> \n> [0]: https://mesonbuild.com/Release-notes.html\n> [1]: https://github.com/mesonbuild/meson/tree/master/docs/markdown/snippets\n> [2]: https://github.com/mesonbuild/meson/blob/master/docs/genrelnotes.py\n> \n> \n> >   ABI | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++\n> >   1 file changed, 50 insertions(+)\n> >   create mode 100644 ABI\n> > \n> > diff --git a/ABI b/ABI\n> > new file mode 100644\n> > index 000000000000..f2772402225f\n> > --- /dev/null\n> > +++ b/ABI\n> > @@ -0,0 +1,50 @@\n> > +# ABI/API Compatibility log\n> > +\n> > +This file reports on ABI and API changes which occur between releases.\n> > +\n> > +The ABI can be checked and verified with the abi-checker tool. To report on the\n> > +ABI and API compatibility of your local tree against the latest release, simply\n> > +run:\n> > +\n> > + ./utils/abi-compat.sh\n> > +\n> > +To check the API and ABI compatibility of a single commit specify the previous\n> > +commit as the start point:\n> > +\n> > + ./utils/abi-compat.sh $COMMIT^ $COMMIT\n> > +\n> > +## v0.7\n> > +\n> > +Commit: b7ed763f0dfb (\"libcamera: request: Make controls_ a class instance\")\n> > + struct Request\n> > +  - Size of this type has been changed from 80 bytes to 152 bytes.\n> \n> The specific sizes are quite platform dependent, so I wouldn't list them.\n> \n> \n> > +    The fields or parameters of such data type may be incorrectly initialized or\n> > +    accessed by old client applications.\n> > +\n> > +  - Type of field controls_ has been changed from struct ControlList* (8 bytes)\n> > +    to struct ControlList (80 bytes).\n> > +    Size of the inclusive type has been changed.\n> > +\n> > + Impact:\n> > +\n> > +  The Request->controls() now has the ControlList allocated directly inside the\n> > +  Request object. There is no API impact, but the change to the size and\n> > +  offsets of the Request object is an ABI breakage and requires re-compilation\n> > +  of users.\n\nMaybe we should keep these notes as short as possible as the information is\nbasically \"No API change, ABI changed, recompilation necessary\". I don't\nknow if we should do that per commit or only per release. But that can\nevolve over time.\n\n> > +\n> > +\n> > +Commit: dce2ef36f2ef (\"libcamera: request: Move metadata_ to Private\")\n> > +  struct Request\n> > +  - Size of this type has been changed from 88 bytes to 80 bytes.\n> > +    The fields or parameters of such data type may be incorrectly initialized or\n> > +    accessed by old client applications.\n> > +\n> > +  - Field metadata_ has been removed from this type.\n> > +    Size of the inclusive type has been changed.\n> > +\n> > +  Impact:\n> > +\n> > +  The Request->metadata() usage now returns a const reference to the underlying\n> > +  metadata control list. Users can not modify this data. The size and offsets\n\nDo we need to explain that the size and offsets is the ABI break or just\nthat there is an ABI break?\n\n> > +  of the Request object is an ABI breakage and requires re-compilation of users.\n\nDoes it require re-compilation \"of users\" or \"of applications\"?\n\nBest regards,\nStefan\n\n> > +\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 0FCF1C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Jan 2026 09:16:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BC75661FC5;\n\tWed, 14 Jan 2026 10:16:15 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9E145615B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Jan 2026 10:16:13 +0100 (CET)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:b781:dff2:957:7831])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 07CA7316;\n\tWed, 14 Jan 2026 10:15:47 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"D3O8Smq4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768382147;\n\tbh=mc//4FS++h+W262ujH3WJn+Zjdk6vZcas6BGUX5ymws=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=D3O8Smq4IiaXOnwade6SRVIQWd6ascA3cY3xP1Um4FvUANy5kjAzYW8y9mzrF2PuN\n\tfjBm491Qq285zzbq4ca0Orfuy9DyCT5L6rm476ZKpGP7qj3bwm8u+rzukCJAzFHPCN\n\tG5n4ZtY3gOR+1yjv4dxXR/aUDjKqxB1p60nKD5R0=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","References":"<20260114052914.26432-1-kieran.bingham@ideasonboard.com>\n\t<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>, libcamera devel\n\t<libcamera-devel@lists.libcamera.org>","Date":"Wed, 14 Jan 2026 10:16:10 +0100","Message-ID":"<176838217073.20276.17963256011840559047@localhost>","User-Agent":"alot/0.12.dev8+g2c003385c862.d20250602","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":37636,"web_url":"https://patchwork.libcamera.org/comment/37636/","msgid":"<07d58b27-749e-4d7a-89f0-38a10190b6c7@ideasonboard.com>","date":"2026-01-14T09:26:01","subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 01. 14. 10:15 keltezéssel, Kieran Bingham írta:\n> Quoting Barnabás Pőcze (2026-01-14 08:45:17)\n>> 2026. 01. 14. 6:29 keltezéssel, Kieran Bingham írta:\n>>> Changes between releases may require updates to user applications\n>>> and ABI changes will require a recompilation of applications.\n>>>\n>>> Track changes which have an impact on the ABI or API to support\n>>> users migrating to a newer release.\n>>>\n>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>> ---\n>>\n>> I was under the impression that we want to make this part of the documentation?\n>> In a kind of \"version history\" / \"release notes\" style.\n> \n> Yes - I thought this was a starting point for that. But you're right -\n> instead of a text file - it could go directly to the generated\n> documentation.\n> \n>> I actually quite like how meson does this[0]. And in the repository, they have a folder[1]\n>> that contains every release note chunk. When a release is made, these files are merged\n>> together into a final \"Release-notes-for-X.Y.Z.md\". And additionally, release notes for\n>> the development version can also be generated easily.\n>>\n>> Thoughts?\n>>\n>> [0]: https://mesonbuild.com/Release-notes.html\n>> [1]: https://github.com/mesonbuild/meson/tree/master/docs/markdown/snippets\n>> [2]: https://github.com/mesonbuild/meson/blob/master/docs/genrelnotes.py\n> \n> I already have a script to semi-automate releases and release notes - so\n> indeed we could extend that with something like this!\n> \n> Are the snippets removed at release time to start again when they are\n> merged or such then ?\n\nThey are removed when a release is made.\n\n\n> \n> \n>   \n>>>    ABI | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++\n>>>    1 file changed, 50 insertions(+)\n>>>    create mode 100644 ABI\n>>>\n>>> diff --git a/ABI b/ABI\n>>> new file mode 100644\n>>> index 000000000000..f2772402225f\n>>> --- /dev/null\n>>> +++ b/ABI\n>>> @@ -0,0 +1,50 @@\n>>> +# ABI/API Compatibility log\n>>> +\n>>> +This file reports on ABI and API changes which occur between releases.\n>>> +\n>>> +The ABI can be checked and verified with the abi-checker tool. To report on the\n>>> +ABI and API compatibility of your local tree against the latest release, simply\n>>> +run:\n>>> +\n>>> + ./utils/abi-compat.sh\n>>> +\n>>> +To check the API and ABI compatibility of a single commit specify the previous\n>>> +commit as the start point:\n>>> +\n>>> + ./utils/abi-compat.sh $COMMIT^ $COMMIT\n>>> +\n>>> +## v0.7\n>>> +\n>>> +Commit: b7ed763f0dfb (\"libcamera: request: Make controls_ a class instance\")\n>>> + struct Request\n>>> +  - Size of this type has been changed from 80 bytes to 152 bytes.\n>>\n>> The specific sizes are quite platform dependent, so I wouldn't list them.\n> \n> They come directly from the abi-compat tool. Indeed, they'll be platform\n> specific - but I was trying to be as clear as possible about what the\n> impact was. Ideally perhaps the snippets could be automatically\n> generated by the tooling too - so I'm probably not too concerned about\n> the specific numbers ... but reporting how it changes (size went up/\n> size went down) etc ... is probably helpful context ?\n\nI also agree with Stefan that these are probably a bit too long. I think\n\"The type libcamera::Request has changed in an ABI incompatible way.\" is sufficient.\n\nIf the API changes, then we could add some notes about migration, but an ABI\nchange requires recompilation, and I suppose most people are not too interested\nin the specifics, so I would keep it short.\n\n\n> \n> \n>>\n>>> +    The fields or parameters of such data type may be incorrectly initialized or\n>>> +    accessed by old client applications.\n>>> +\n>>> +  - Type of field controls_ has been changed from struct ControlList* (8 bytes)\n>>> +    to struct ControlList (80 bytes).\n>>> +    Size of the inclusive type has been changed.\n>>> +\n> \n> The impact section I wrote myself, as an example for showing what we\n> might say about a change - but the section above is the generated text\n> from the tool reformatted.\n> \n> \n>>> + Impact:\n>>> +\n>>> +  The Request->controls() now has the ControlList allocated directly inside the\n>>> +  Request object. There is no API impact, but the change to the size and\n>>> +  offsets of the Request object is an ABI breakage and requires re-compilation\n>>> +  of users.\n>>> +\n>>> +\n>>> +Commit: dce2ef36f2ef (\"libcamera: request: Move metadata_ to Private\")\n>>> +  struct Request\n>>> +  - Size of this type has been changed from 88 bytes to 80 bytes.\n>>> +    The fields or parameters of such data type may be incorrectly initialized or\n>>> +    accessed by old client applications.\n>>> +\n>>> +  - Field metadata_ has been removed from this type.\n>>> +    Size of the inclusive type has been changed.\n>>> +\n>>> +  Impact:\n>>> +\n>>> +  The Request->metadata() usage now returns a const reference to the underlying\n>>> +  metadata control list. Users can not modify this data. The size and offsets\n>>> +  of the Request object is an ABI breakage and requires re-compilation of users.\n>>> +\n>>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6A092C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Jan 2026 09:26:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1AA3661FB7;\n\tWed, 14 Jan 2026 10:26:06 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A0608615B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Jan 2026 10:26:04 +0100 (CET)","from [192.168.33.18] (185.221.143.114.nat.pool.zt.hu\n\t[185.221.143.114])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 07C75316;\n\tWed, 14 Jan 2026 10:25:38 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pwBNecUJ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768382738;\n\tbh=rrhtpeAzl85wxVevpYqiJLEPNpWzc+oFd9MTp6xWDuk=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=pwBNecUJ2Q3dNP8JlX1E48h5NxJj1lMl5JYFElTOoO8AmLJeN2Klua5LqsogwDhtL\n\t8sBMbM9S3+oPKYG1cxGeqZy71Z7sd9YpFeEfEGWNb3rdcoFrGN/YDGd/R0TEFtsy/C\n\tsABpsSP9xR6G0WZDQRiK8f37tJkvCHQZcn/UiqAg=","Message-ID":"<07d58b27-749e-4d7a-89f0-38a10190b6c7@ideasonboard.com>","Date":"Wed, 14 Jan 2026 10:26:01 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] libcamera: Provide an ABI compatibility record","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>","References":"<20260114052914.26432-1-kieran.bingham@ideasonboard.com>\n\t<8e92f5a5-d134-4435-a8cd-0bdb2290712b@ideasonboard.com>\n\t<176838214563.1693075.14609231472783438095@ping.linuxembedded.co.uk>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<176838214563.1693075.14609231472783438095@ping.linuxembedded.co.uk>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]