Make it possible for pure-QML apps to use `-qml` variant of framework (and perhaps use by default)
The original concept of Click frameworks is that they are "contracts" between the platform (OS) and apps [1], which can be as broad or as narrow as we like. However, because we've never concretely defined this contract, currently the ubuntu-sdk-20.04
's de-facto contract has been "everything on the 20.04 images".
This becomes a problem on Noble-based images; compared to Focal, it contains libssl.so.1 -> libssl.so.3 transition. This mean the top-level ubuntu-sdk-20.04
's contract can no longer be maintained and the framework will (in principle) have to be removed. Applications using ubuntu-sdk-20.04
framework will have to be re-built in order to be able to run on Noble-based images again, which could be a churn on some developers.
However, there is the smaller variant of the framework, ubuntu-sdk-20.04-qml
, which could be understood as "pre-installed QML types". Since Noble-based images will not have QML API changes, they will be able to retain ubuntu-sdk-20.04-qml
framework on the images, and apps using ubuntu-sdk-20.04-qml
framework will be able to run on them.
Currently, every app built using e.g. 20.04 images gets CLICK_FRAMEWORK
value of ubuntu-sdk-20.04
i.e. the full variant. However, for QML apps, merely using ubuntu-sdk-20.04-qml
should be enough. If enough apps use -qml
variant, it'll allow Noble-based Ubuntu Touch images to remove ubuntu-sdk-20.04
and retain ubuntu-sdk-20.04-qml
, knowing that at least pure QML applications will be able to run without re-compiling.
In the future, it's probably worth it to define more concretely which library/QML type is part of the "contract". For example, we could define that e.g. libssl.so.3 is not part of the framework's contract while libQt5Quick.so.5 is, allowing most native applications to stay compatible with future versions. For apps that need to link to libssl.so.3, an -internal
variant could be provided that will be removed every time a new major version is released.