LAYERSERIES_COMPAT_ variable in the layer's recipe


Zoran
 

Hello to Yocto community,

As I am much more passive yocto wise these few years ( working on
Android build systems and around, this is also a nightmare, I should
say ;-) ), I have one Yocto question which I never really understood.

I will ask it by example. I have one layer for the CAN tools and apps
which I have created 4 years ago:
https://github.com/ZoranStojsavljevic/meta-socketcan

In there, in conf/layer.conf:
https://github.com/ZoranStojsavljevic/meta-socketcan/blob/master/conf/layer.conf

I have the following line (layers' compatibility):
LAYERSERIES_COMPAT_meta-socketcan = "sumo thud warrior zeus dunfell
gatesgarth hardknott honister kirkstone"

I do not understand why we need to explicitly name releases for such
simple generic layers?!

Instead, for a virtual example:
LAYERSERIES_COMPAT_meta-socketcan = "${AUTOLAYER x}"

So all the layers might be included (or for at least lets say x = 4
latest releases, where x = 0 would be include all)? I do understand
that complex layers could NOT have such a definition (because of the
dependencies), but for the generic layers (as such presented), this
would be beneficial.

Thank you for the answers,
Zee
_______


Rudolf J Streif
 



On Wed, Nov 30, 2022, 20:27 Zoran <zoran.stojsavljevic@...> wrote:
Hello to Yocto community,

As I am much more passive yocto wise these few years ( working on
Android build systems and around, this is also a nightmare, I should
say ;-) ), I have one Yocto question which I never really understood.

I will ask it by example. I have one layer for the CAN tools and apps
which I have created 4 years ago:
https://github.com/ZoranStojsavljevic/meta-socketcan

In there, in conf/layer.conf:
https://github.com/ZoranStojsavljevic/meta-socketcan/blob/master/conf/layer.conf

I have the following line (layers' compatibility):
LAYERSERIES_COMPAT_meta-socketcan = "sumo thud warrior zeus dunfell
gatesgarth hardknott honister kirkstone"

I do not understand why we need to explicitly name releases for such
simple generic layers?!

To me this indicates that the maintainer of the layer has tested the compatibility of his layer with all of these releases of the Yocto Project.

A maintainer of a layer should make a deliberate decision of adding a release or dropping one from the compatibility list. It should be an attestation that the layer's compatibility with the releases in the list is actually maintained and tested.

There have been changes to the syntax to conditional variables. Your layer might well be compatible with all of the releases and it's great if you tested it. But it's not a given.

Instead, for a virtual example:
LAYERSERIES_COMPAT_meta-socketcan = "${AUTOLAYER x}"

So all the layers might be included (or for at least lets say x = 4
latest releases, where x = 0 would be include all)? I do understand
that complex layers could NOT have such a definition (because of the
dependencies), but for the generic layers (as such presented), this
would be beneficial.

I never cared for ${AUTOREV}, which is similar, in the first place for the very reason that it creates inconsistent behavior. This would do the same thing. What would the last 4 releases even mean? What is the reference and where is it obtained from?

Thank you for the answers,
Zee
_______

Best,
:rjs




Martin Jansa
 

Agreed with Rudolf.

If the layer maintainer didn't bother to do at least do one build with new release and adjust LAYERSERIES_COMPAT, then I don't consider that layer well maintained (it could be someone else who uses the layer, tests it with new release and sends PR to adjust LAYERSERIES_COMPAT).

Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"

which is also bad as it completely disables the check (seen in https://git.phytec.de/meta-phytec/tree/conf/layer.conf#n14).

On Thu, Dec 1, 2022 at 7:06 AM Rudolf J Streif <rudolf.streif@...> wrote:


On Wed, Nov 30, 2022, 20:27 Zoran <zoran.stojsavljevic@...> wrote:
Hello to Yocto community,

As I am much more passive yocto wise these few years ( working on
Android build systems and around, this is also a nightmare, I should
say ;-) ), I have one Yocto question which I never really understood.

I will ask it by example. I have one layer for the CAN tools and apps
which I have created 4 years ago:
https://github.com/ZoranStojsavljevic/meta-socketcan

In there, in conf/layer.conf:
https://github.com/ZoranStojsavljevic/meta-socketcan/blob/master/conf/layer.conf

I have the following line (layers' compatibility):
LAYERSERIES_COMPAT_meta-socketcan = "sumo thud warrior zeus dunfell
gatesgarth hardknott honister kirkstone"

I do not understand why we need to explicitly name releases for such
simple generic layers?!

To me this indicates that the maintainer of the layer has tested the compatibility of his layer with all of these releases of the Yocto Project.

A maintainer of a layer should make a deliberate decision of adding a release or dropping one from the compatibility list. It should be an attestation that the layer's compatibility with the releases in the list is actually maintained and tested.

There have been changes to the syntax to conditional variables. Your layer might well be compatible with all of the releases and it's great if you tested it. But it's not a given.

Instead, for a virtual example:
LAYERSERIES_COMPAT_meta-socketcan = "${AUTOLAYER x}"

So all the layers might be included (or for at least lets say x = 4
latest releases, where x = 0 would be include all)? I do understand
that complex layers could NOT have such a definition (because of the
dependencies), but for the generic layers (as such presented), this
would be beneficial.

I never cared for ${AUTOREV}, which is similar, in the first place for the very reason that it creates inconsistent behavior. This would do the same thing. What would the last 4 releases even mean? What is the reference and where is it obtained from?

Thank you for the answers,
Zee
_______

Best,
:rjs







Alexander Kanavin
 

And this is the commit that did this:
https://git.phytec.de/meta-phytec/commit/conf/layer.conf?id=8261e896d2b43211e7377feb38e919336d47c39f

Shame on you, phytec. Shame on you. What you do in your layers perhaps
doesn't matter so much, but you also give everyone a bad example to
follow.

Alex

On Thu, 1 Dec 2022 at 08:47, Martin Jansa <Martin.Jansa@...> wrote:

Agreed with Rudolf.

If the layer maintainer didn't bother to do at least do one build with new release and adjust LAYERSERIES_COMPAT, then I don't consider that layer well maintained (it could be someone else who uses the layer, tests it with new release and sends PR to adjust LAYERSERIES_COMPAT).

Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"

which is also bad as it completely disables the check (seen in https://git.phytec.de/meta-phytec/tree/conf/layer.conf#n14).

On Thu, Dec 1, 2022 at 7:06 AM Rudolf J Streif <rudolf.streif@...> wrote:



On Wed, Nov 30, 2022, 20:27 Zoran <zoran.stojsavljevic@...> wrote:

Hello to Yocto community,

As I am much more passive yocto wise these few years ( working on
Android build systems and around, this is also a nightmare, I should
say ;-) ), I have one Yocto question which I never really understood.

I will ask it by example. I have one layer for the CAN tools and apps
which I have created 4 years ago:
https://github.com/ZoranStojsavljevic/meta-socketcan

In there, in conf/layer.conf:
https://github.com/ZoranStojsavljevic/meta-socketcan/blob/master/conf/layer.conf

I have the following line (layers' compatibility):
LAYERSERIES_COMPAT_meta-socketcan = "sumo thud warrior zeus dunfell
gatesgarth hardknott honister kirkstone"

I do not understand why we need to explicitly name releases for such
simple generic layers?!

To me this indicates that the maintainer of the layer has tested the compatibility of his layer with all of these releases of the Yocto Project.

A maintainer of a layer should make a deliberate decision of adding a release or dropping one from the compatibility list. It should be an attestation that the layer's compatibility with the releases in the list is actually maintained and tested.

There have been changes to the syntax to conditional variables. Your layer might well be compatible with all of the releases and it's great if you tested it. But it's not a given.


Instead, for a virtual example:
LAYERSERIES_COMPAT_meta-socketcan = "${AUTOLAYER x}"

So all the layers might be included (or for at least lets say x = 4
latest releases, where x = 0 would be include all)? I do understand
that complex layers could NOT have such a definition (because of the
dependencies), but for the generic layers (as such presented), this
would be beneficial.

I never cared for ${AUTOREV}, which is similar, in the first place for the very reason that it creates inconsistent behavior. This would do the same thing. What would the last 4 releases even mean? What is the reference and where is it obtained from?


Thank you for the answers,
Zee

_______

Best,
:rjs






Richard Purdie
 

On Thu, 2022-12-01 at 11:09 +0100, Alexander Kanavin wrote:
And this is the commit that did this:
https://git.phytec.de/meta-phytec/commit/conf/layer.conf?id=8261e896d2b43211e7377feb38e919336d47c39f

Shame on you, phytec. Shame on you. What you do in your layers perhaps
doesn't matter so much, but you also give everyone a bad example to
follow.
That commit really is not in the spirit of things and I'm not happy
people are doing that. I'd not be surprised if that stopped working
soon.

We had a huge problem with unmaintained layers where it was unclear
which releases a master branch worked or had been tested with. An
actively maintained layer should have no problem with updating this a
couple of times a year. If that is an issue, it isn't actively
maintained and it makes that clear.

Cheers,

Richard


Ross Burton
 

On 1 Dec 2022, at 04:27, Zoran via lists.yoctoproject.org <zoran.stojsavljevic=gmail.com@...> wrote:
I do not understand why we need to explicitly name releases for such
simple generic layers?!
The compatibility is because over time things change: override syntax has changed, classes get added or removed, functionality may appear in bitbake. Sometimes the breakage is subtle, and a layer may parse and appear to build fine, but be broken.

Your meta-socketcan layer is broken in honister onwards despite claiming compatibility, for example.

Ross


Martin Jansa
 

On Thu, Dec 1, 2022 at 12:09 PM Ross Burton <ross.burton@...> wrote:
On 1 Dec 2022, at 04:27, Zoran via lists.yoctoproject.org <zoran.stojsavljevic=gmail.com@...> wrote:
> I do not understand why we need to explicitly name releases for such
> simple generic layers?!

The compatibility is because over time things change: override syntax has changed, classes get added or removed, functionality may appear in bitbake.  Sometimes the breakage is subtle, and a layer may parse and appear to build fine, but be broken.

Your meta-socketcan layer is broken in honister onwards despite claiming compatibility, for example.

And here is another example why nobody should be using meta-socketcan:

You cannot change the declared LICENSE of the components, just because you wish them to use the same license as the layer metadata, especially when those components clearly declare different LICENSE in the source code, e.g.:

Using COMMON_LICENSE_DIR in LIC_FILES_CHKSUM is another anti-pattern which just disables whole purpose of LIC_FILES_CHKSUM and this is acceptable only for "pure-metadata" recipes like packagegroups or image recipes.


Zoran
 

Ross,

It is now broken even in hardknott. I tried it, just as I tried it
before (it worked before).

I have no idea what the ERROR is:

zoran.s@NBK0005U:~/projects2/yocto/bbb-yocto/build$ bitbake -k
core-image-minimal
Loading cache: 100% |
| ETA:
--:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100%
|#################################################################################################################|
Time: 0:00:23
Parsing of 814 .bb files complete (0 cached, 814 parsed). 1438
targets, 41 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'cannelloni' (but
/home/zoran.s/projects2/yocto/bbb-yocto/poky/meta/recipes-core/images/core-image-minimal.bb
RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'cannelloni' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['cannelloni']
ERROR: Nothing RPROVIDES 'can-utils' (but
/home/zoran.s/projects2/yocto/bbb-yocto/poky/meta/recipes-core/images/core-image-minimal.bb
RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'can-utils' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['can-utils']
ERROR: Nothing RPROVIDES 'socketcand' (but
/home/zoran.s/projects2/yocto/bbb-yocto/poky/meta/recipes-core/images/core-image-minimal.bb
RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'socketcand' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['socketcand']
ERROR: Nothing RPROVIDES 'core-image-minimal'
No eligible RPROVIDERs exist for 'core-image-minimal'
NOTE: Runtime target 'core-image-minimal' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['core-image-minimal']


And my /home/zoran.s/projects2/yocto/bbb-yocto/poky/meta/recipes-core/images/core-image-minimal.bb
is:

SUMMARY = "A small image just capable of allowing a device to boot."

IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"

IMAGE_LINGUAS = " "

LICENSE = "MIT"

nano meta/recipes-core/images/core-image-minimal.bb

## IMAGE_INSTALL_append = " kernel-modules"
IMAGE_INSTALL_append = " \
kernel-modules \
cannelloni \
can-utils \
socketcand \
"

IMAGE_ROOTFS_SIZE ?= "8192"
IMAGE_ROOTFS_EXTRA_SPACE_append =
"${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", ""
,d)}"

Zee
________

On Thu, Dec 1, 2022 at 12:09 PM Ross Burton <Ross.Burton@...> wrote:

On 1 Dec 2022, at 04:27, Zoran via lists.yoctoproject.org <zoran.stojsavljevic=gmail.com@...> wrote:
I do not understand why we need to explicitly name releases for such
simple generic layers?!
The compatibility is because over time things change: override syntax has changed, classes get added or removed, functionality may appear in bitbake. Sometimes the breakage is subtle, and a layer may parse and appear to build fine, but be broken.

Your meta-socketcan layer is broken in honister onwards despite claiming compatibility, for example.

Ross


Zoran
 

Martin, U R too fast. Speedy Gonzales. ;-)

I do agree that this is the bad practice to change licences for the
known recipes. For the can-utils and socketcand. I'll revert this back
to GPLv2.

But, could you, please, allow me to have my own original cannelloni
recipe (yes, I developed it with some help from this community) on my
own terms? I DID not copy it from anywhere. It is an ORIGINAL.

Please, check. Do NOT overspeed. Please.

Thank you for your advice.

Zee
_______

On Thu, Dec 1, 2022 at 12:18 PM Martin Jansa <martin.jansa@...> wrote:

On Thu, Dec 1, 2022 at 12:09 PM Ross Burton <ross.burton@...> wrote:

On 1 Dec 2022, at 04:27, Zoran via lists.yoctoproject.org <zoran.stojsavljevic=gmail.com@...> wrote:
I do not understand why we need to explicitly name releases for such
simple generic layers?!
The compatibility is because over time things change: override syntax has changed, classes get added or removed, functionality may appear in bitbake. Sometimes the breakage is subtle, and a layer may parse and appear to build fine, but be broken.

Your meta-socketcan layer is broken in honister onwards despite claiming compatibility, for example.

And here is another example why nobody should be using meta-socketcan:
https://github.com/ZoranStojsavljevic/meta-socketcan/commit/cefd86cd1def9ad2e63be527f8ce36a076d7e17c#

You cannot change the declared LICENSE of the components, just because you wish them to use the same license as the layer metadata, especially when those components clearly declare different LICENSE in the source code, e.g.:
https://github.com/linux-can/socketcand/commit/a7ab9878d11ac187b92dcf48b6331c228f4f4b92

Using COMMON_LICENSE_DIR in LIC_FILES_CHKSUM is another anti-pattern which just disables whole purpose of LIC_FILES_CHKSUM and this is acceptable only for "pure-metadata" recipes like packagegroups or image recipes.


Ross Burton
 

On 1 Dec 2022, at 12:46, Zoran Stojsavljevic <zoran.stojsavljevic@...> wrote:
But, could you, please, allow me to have my own original cannelloni
recipe (yes, I developed it with some help from this community) on my
own terms? I DID not copy it from anywhere. It is an ORIGINAL.
As I explained in the bug I filed in your repository, the LICENSE statement is the license of the contents of the packages, not the recipe itself.

https://github.com/mguentner/cannelloni clearly says GPLv2.

Ross


Zoran
 

Agreed. Will revert.

Zee
_______

On Thu, Dec 1, 2022 at 1:48 PM Ross Burton <Ross.Burton@...> wrote:

On 1 Dec 2022, at 12:46, Zoran Stojsavljevic <zoran.stojsavljevic@...> wrote:
But, could you, please, allow me to have my own original cannelloni
recipe (yes, I developed it with some help from this community) on my
own terms? I DID not copy it from anywhere. It is an ORIGINAL.
As I explained in the bug I filed in your repository, the LICENSE statement is the license of the contents of the packages, not the recipe itself.

https://github.com/mguentner/cannelloni clearly says GPLv2.

Ross


Rudolf J Streif
 

Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"
Oh no, now the entire Yocto Project world knows about this hack. Now we need a sanity checker for this in the insane class. :)


Alexander Kanavin
 

On Thu, 1 Dec 2022 at 17:41, Rudolf J Streif <rudolf.streif@...> wrote:


Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"
Oh no, now the entire Yocto Project world knows about this hack. Now we
need a sanity checker for this in the insane class. :)
It's a slippery slope. We can also for example make bitbake forcibly
not expand any variables in it, and write out an angry rant when
someone tries, and then I'm sure determined people will find a way
around that too.

Alex


Zoran
 

Do not bother... This is a war between me and the entire YOCTO
community of founders... It has been going for a while. Lot of INTEL
guys and former INTEL guys against former INTEL guy. Me.

But, I came here with Peace. It seems some people could not overcome their EGOs.

I am trying to ask for a brainstorming. Now, I am trying to
understand, why the backpors took place from kirkstone... Once my
scripts were working for hardknott...

But they do not work anymore.

Well...

Not my fault. Just trying to push forward.

Zee
_______

On Thu, Dec 1, 2022 at 6:01 PM Alexander Kanavin <alex.kanavin@...> wrote:

On Thu, 1 Dec 2022 at 17:41, Rudolf J Streif <rudolf.streif@...> wrote:


Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"
Oh no, now the entire Yocto Project world knows about this hack. Now we
need a sanity checker for this in the insane class. :)
It's a slippery slope. We can also for example make bitbake forcibly
not expand any variables in it, and write out an angry rant when
someone tries, and then I'm sure determined people will find a way
around that too.

Alex


Stefan Mueller-Klieser
 

Am Donnerstag, dem 01.12.2022 um 11:09 +0100 schrieb Alexander Kanavin:
And this is the commit that did this:
https://git.phytec.de/meta-phytec/commit/conf/layer.conf?id=8261e896d2b43211e7377feb38e919336d47c39f

Shame on you, phytec. Shame on you. What you do in your layers perhaps
doesn't matter so much, but you also give everyone a bad example to
follow.
Hi Alexander,

instead of putting shame on people, I would propose, for a prospering
community, to send out hints to maintainers, when an enforced mechanism
is being disabled. I would have just ignored your email if Richard did
not cleared things up with his patch. Thanks.

Regards, Stefan


Alex

On Thu, 1 Dec 2022 at 08:47, Martin Jansa <Martin.Jansa@...> wrote:

Agreed with Rudolf.

If the layer maintainer didn't bother to do at least do one build with new release and adjust
LAYERSERIES_COMPAT, then I don't consider that layer well maintained (it could be someone else who uses
the layer, tests it with new release and sends PR to adjust LAYERSERIES_COMPAT).

Recently I've also seen this:
LAYERSERIES_COMPAT_phytec = "${LAYERSERIES_COMPAT_core}"

which is also bad as it completely disables the check (seen in
https://git.phytec.de/meta-phytec/tree/conf/layer.conf#n14).

On Thu, Dec 1, 2022 at 7:06 AM Rudolf J Streif <rudolf.streif@...> wrote:



On Wed, Nov 30, 2022, 20:27 Zoran <zoran.stojsavljevic@...> wrote:

Hello to Yocto community,

As I am much more passive yocto wise these few years ( working on
Android build systems and around, this is also a nightmare, I should
say ;-) ), I have one Yocto question which I never really understood.

I will ask it by example. I have one layer for the CAN tools and apps
which I have created 4 years ago:
https://github.com/ZoranStojsavljevic/meta-socketcan

In there, in conf/layer.conf:
https://github.com/ZoranStojsavljevic/meta-socketcan/blob/master/conf/layer.conf

I have the following line (layers' compatibility):
LAYERSERIES_COMPAT_meta-socketcan = "sumo thud warrior zeus dunfell
gatesgarth hardknott honister kirkstone"

I do not understand why we need to explicitly name releases for such
simple generic layers?!

To me this indicates that the maintainer of the layer has tested the compatibility of his layer with all
of these releases of the Yocto Project.

A maintainer of a layer should make a deliberate decision of adding a release or dropping one from the
compatibility list. It should be an attestation that the layer's compatibility with the releases in the
list is actually maintained and tested.

There have been changes to the syntax to conditional variables. Your layer might well be compatible with
all of the releases and it's great if you tested it. But it's not a given.


Instead, for a virtual example:
LAYERSERIES_COMPAT_meta-socketcan = "${AUTOLAYER x}"

So all the layers might be included (or for at least lets say x = 4
latest releases, where x = 0 would be include all)? I do understand
that complex layers could NOT have such a definition (because of the
dependencies), but for the generic layers (as such presented), this
would be beneficial.

I never cared for ${AUTOREV}, which is similar, in the first place for the very reason that it creates
inconsistent behavior. This would do the same thing. What would the last 4 releases even mean? What is
the reference and where is it obtained from?


Thank you for the answers,
Zee

_______

Best,
:rjs