What are the Differences Between Torizon and CommonTorizon Container Images?

Within the Torizon ecosystem we also have Common Torizon. Common Torizon is a community driven derivative work from Torizon open source project. It aims to extend the Torizon ecosystem beyond Toradex SoMs. Therefore, it was also necessary to create container images that were compatible with the hardware that is the target of Common Torizon. This was the main motivation for creating the Common Torizon container images.

Despite the main motivation, an additional opportunity was identified, to provide more flexibility and power to the community of the Torizon ecosystem, who could extend the functionalities of Torizon container images to meet their specific needs in an experimental way.

Debian Base Images

The base, the origin, of all Torizon container images is from Debian. Debian is stable, contains a huge number of packages and is very well supported. It also has portability for different architectures. Therefore, it is a natural and safe choice for container image foundation.

Torizon / Common Torizon Base Images

Why Torizon images? Why not only use Debian images? Being very simplistic, Torizon images are Debian images with a touch of a special sauce. There is a team at Torizon group that works to package the Toradex specific software for their respective hardware. This includes drivers, libraries, and tools that are necessary to make the hardware work properly, within Debian, that are not present in the upstream package feed. This is the main difference between Torizon and Debian images. There is also a need to apply some patch or optimization to some package, so that it works correctly in an embedded system environment. Bearing in mind that Debian is mostly used for desktop and server systems, the packages are not always prepared for a different environment. So, Toradex provide a package feed that is used to install the custom, patched and hardware specific packages, and their respective dependencies. This feed is included in Torizon images. In addition to the packages, there are some configurations included in the Torizon images, so that application development is as integrated and easy as possible when working together with Torizon OS.

Comparing with Common Torizon images there is no much difference here. The Common Torizon images uses the Torizon images as a base, they are already configured for work with Torizon OS that is the same base for Common Torizon OS.

The images are:

TorizonCommon Torizon
torizon/debiancommontorizon/debian
torizon/debian-vivantecommontorizon/debian-imx8
torizon/debian-imx8commontorizon/debian-imx8
torizon/debian-am62commontorizon/debian-am62

Hardware Specific Images

Why are there -vivante, -imx8 and -am62 images? These images are hardware specific images. They contain the necessary drivers and configurations for the hardware that is the target of the image. The -vivante and -imx8 images are for the NXP i.MX 8 based hardware. The -am62 image is for the Texas Instruments AM62 based hardware.

⚠️ The -vivante is a legacy name that was used in the past for the i.MX 8 target images. These are still used for integration with TOS 5 and 6. But for TOS 7 forward, the -imx8 is the new name for the i.MX 8 target images.

So, why there is no -rpi image variant from the Common Torizon side, to handle Raspberry Pi specific based hardware? Because Raspberry Pi hardware works out of the box within Debian and the upstream package feed. So in this case the image to be used is the default commontorizon/debian.

Next question: if the images here are basically the same, why then have torizon/debian and commontorizon/debian? Toradex Torizon team started publishing images with support for x86_64, a Common Torizon target hardware, only now in version 4.x.x. So that the end user did not need to change repositories and could have access to all architectures in a single namespace and version, commontorizon/debian was also created.

Torizon Application Containers

There is also a set of container images, that are provided by Toradex, that are intended to be used as a base for application containers. They are also available in the Toradex Docker Hub repository. Let’s describe them in sections.

Graphical Application Base and Graphical Compositor

These images are intended to be used as a base for graphical applications. They contain the necessary libraries and tools to run graphical applications, when using a specific graphical compositor:

TorizonCommon Torizon
torizon/wayland-basecommontorizon/wayland-base
torizon/wayland-base-vivantecommontorizon/wayland-base-imx8
torizon/wayland-base-imx8commontorizon/wayland-base-imx8
torizon/wayland-base-am62commontorizon/wayland-base-am62
torizon/westoncommontorizon/weston
torizon/weston-vivantecommontorizon/weston-imx8
torizon/weston-imx8commontorizon/weston-imx8
torizon/weston-am62commontorizon/weston-am62

These are very pretty the same images between Torizon and Common Torizon. Previously the torizon/weston had Weston package built to work with libseat support only for the i.MX 8 torizon/weston-vivante and torizon/weston-am62 images. So, to the Weston work properly on Common Torizon target was needed to change the commontorizon/weston with the Weston packages built with libseat support. But now, version 4.x.xforward, the torizon/weston images have also the Weston package built with libseat support.

Common Torizon Graphical Additional Images

At the Common Torizon side, for the graphical applications, there are some additional images that are not present in the Torizon side. These images add some experimental features like:

ImageFeature
commontorizon/xfceX11 desktop environment configured to be used in kiosk mode
commontorizon/x-baseBase image for X11 applications

Graphical Application Base Framework Specific

There is also a set of images that are intended to be used as a base for graphical applications that are based on a specific frameworks. This way the developer can easy start a project using a specific framework:

TorizonCommon Torizon
torizon/qt5-waylandcommontorizon/qt5-wayland
torizon/qt5-wayland-vivantecommontorizon/qt5-wayland-imx8
torizon/qt5-wayland-imx8commontorizon/qt5-wayland-imx8
torizon/qt5-wayland-am62commontorizon/qt5-wayland-am62
torizon/qt6-waylandcommontorizon/qt6-wayland
torizon/qt6-wayland-vivantecommontorizon/qt6-wayland-imx8
torizon/qt6-wayland-imx8commontorizon/qt6-wayland-imx8
torizon/qt6-wayland-am62commontorizon/qt6-wayland-am62
torizon/wayland-gtk3commontorizon/wayland-base-gtk
torizon/wayland-gtk3-imx8commontorizon/wayland-base-gtk-imx8
torizon/wayland-gtk3-am62commontorizon/wayland-base-gtk-am62

These are all pretty similar images, no changes, again to maintain the single namespace for all architectures. Only the commontorizon/wayland-base-gtk which has significant changes, it adds support for Wayland text input v1 for GTK applications, that is not included in the Torizon side.

But there are others that are similar variants, but they use different base images:

TorizonCommon Torizon
torizon/dotnet8-gtk3commontorizon/dotnet-gtk
torizon/dotnet8-gtk3-imx8commontorizon/dotnet-gtk-imx8
torizon/dotnet8-gtk3-am62commontorizon/dotnet-gtk-am62

⚠️ From the Common Torizon side the commontorizon/dotnet-gtk uses the commontorizon/wayland-base-gtk as a base image, to inherit the Wayland text input v1 support.

Common Torizon Graphical App Framework Specific Additional Images

Also the Common Torizon includes the variants with the vsdgb for .NET GTK:

ImageFeature
commontorizon/dotnet-gtk-debug.NET GTK application with Visual Studio Debugger support
commontorizon/dotnet-gtk-debug-imx8.NET GTK application with Visual Studio Debugger support for i.MX 8 hardware target
commontorizon/dotnet-gtk-debug-am62.NET GTK application with Visual Studio Debugger support for TI AM62 hardware target

There are also .NET images for GTK that uses the commontorizon/x-base as a base image:

ImageFeature
commontorizon/dotnet-x-gtk.NET GTK application with X11 support
commontorizon/dotnet-x-gtk-debug.NET GTK application with X11 support and Visual Studio Debugger support

Continuing with the .NET images, there are also the .NET images for WinForms that uses the Mono runtime:

ImageFeature
commontorizon/mono-sdk.NET Mono image with all the tooling to build .NET WinForms v4.x applications
commontorizon/mono-sdk-imx8.NET Mono image with all the tooling to build .NET WinForms v4.x applications for i.MX 8 hardware target
commontorizon/mono-sdk-am62.NET Mono image with all the tooling to build .NET WinForms v4.x applications for TI AM62 hardware target
commontorizon/mono-runtime.NET Mono image with all the dependencies to run .NET WinForms v4.x applications
commontorizon/mono-runtime-imx8.NET Mono image with all the dependencies to run .NET WinForms v4.x applications for i.MX 8 hardware target
commontorizon/mono-runtime-am62.NET Mono image with all the dependencies to run .NET WinForms v4.x applications for TI AM62 hardware target

From the Common Torizon side we also are open to the community and Toradex partners to add their specific images. This is the case from Slint images. Essas imagens são um trabalho em conjunto entre o time do Slint para que usuários do ecosistema Torizon tenham uma melhor experiência de desenvolvimento ao utilizar o Slint:

ImageFeature
commontorizon/slint-sdk-amd64Image with all the dependencies and tooling to cross compile Slint applications for x86-64 architecture
commontorizon/slint-sdk-armImage with all the dependencies and tooling to cross compile Slint applications for armv7 architecture
commontorizon/slint-sdk-arm64Image with all the dependencies and tooling to cross compile Slint applications for armv8 architecture
commontorizon/slint-base-amd64Base image for Slint applications for x86-64 architecture
commontorizon/slint-base-armBase image for Slint applications for armv7 architecture
commontorizon/slint-base-arm64Base image for Slint applications for armv8 architecture
commontorizon/slint-base-arm64-vivanteBase image for Slint applications for armv8 architecture and i.MX 8 hardware target
commontorizon/slint-base-arm64-imx8Base image for Slint applications for armv8 architecture and i.MX 8 hardware target
commontorizon/slint-base-arm64-am62Base image for Slint applications for armv8 architecture and TI AM62 hardware target

Why these kind of images are important? When the developer is starting a project is much easier to start from a base image that already contains all the necessary dependencies, and was pre-built, than start from scratch. This way the developer can save time and focus on the application development.

And finishing this section, there are also the Gambas 3 images:

ImageFeature
commontorizon/gambas3Image for use with Gambas3 applications
commontorizon/gambas3-imx8Image for use with Gambas3 applications for i.MX 8 hardware target
commontorizon/gambas3-am62Image for use with Gambas3 applications for TI AM62 hardware target

Gambas is a free development environment based on a Basic interpreter with object extensions, like Visual Basic. It is inspired by Visual Basic and Java. With Gambas, you can quickly design your program GUI, and the tooling recall a lot the way of developing desktop applications with Visual Basic 6. VB6 was one of the first languages and frameworks that I used when I was starting my career as a developer, so I have a special affection for it.

Web Based Applications

There are images that are intended to be used as a base for web based applications. There are images with browser support and framework specific images:

TorizonCommon Torizon
torizon/chromiumN/A
torizon/chromium-imx8N/A
torizon/chromium-am62N/A
torizon/cogcommontorizon/cog
torizon/cog-imx8commontorizon/cog-imx8
torizon/cog-am62commontorizon/cog-am62

⚠️ The Common Torizon COG images are pretty similar to the Torizon COG images, but they add a difference: the container entrypoint was significantly customized, it provide a mechanism to wait for a server to be ready. This is useful when the developer is working with a multi-container application that has a server and a client, and the server needs to be ready before the client starts.

⚠️ The Chromium images are not available from the Common Torizon side, because until today was not necessary to have it. From my experiments the COG had a better performance than Chromium.

Framework Specific Web Based Applications

There are also images that are intended to be used as a base for web based applications that are based on a specific frameworks:

TorizonCommon Torizon
torizon/aspdotnetcommontorizon/aspdotnet
torizon/aspdotnet8commontorizon/aspdotnet
torizon/aspdotnet8-imx8N/A
torizon/aspdotnet8-am62N/A
torizon/aspdotnet-debugcommontorizon/aspdotnet-debug

These are pretty similar images, the only differences is the specific hardware ones that are not available from the Common Torizon side. On my point of view is not necessary to have these images since the ASP.NET does not use anything hardware specific in the “server” side, like GPU acceleration. (but I can be wrong 😝)

Tooling

There are also images that are intended to be used as development tooling. Is much easier have the tooling packaged in a container image than install all the dependencies and configure the environment:

Common TorizonTorizon
commontorizon/debian-cross-toolchain-amd64torizon/debian-cross-toolchain-amd64
commontorizon/debian-cross-toolchain-arm64torizon/debian-cross-toolchain-arm64
commontorizon/debian-cross-toolchain-arm64torizon/debian-cross-toolchain-arm64-vivante
commontorizon/debian-cross-toolchain-arm64torizon/debian-cross-toolchain-arm64-imx8
commontorizon/debian-cross-toolchain-armtorizon/debian-cross-toolchain-arm
commontorizon/cross-toolchain-arm64torizon/cross-toolchain-arm64
commontorizon/cross-toolchain-armtorizon/cross-toolchain-arm
commontorizon/cross-toolchain-amd64N/A
N/Atorizon/torizoncore-builder
commontorizon/binfmttorizon/binfmt

These are pretty similar images, again they are added to the Common Torizon side to provide a single namespace for all architectures.

⚠️ The commontorizon/binfmt from the Common Torizon has significant changes, it adds support for the arm64 and arm architecture and also uses the latest stable qemu-system binaries.

Common Torizon Tooling Additional Images

The additional images from the Common Torizon side are:

ImageFeature
commontorizon/tcb-devExperimental builds of TorizonCore Builder with features specific for Common Torizon
commontorizon/deb-builderImage with all the dependencies to build Debian packages
commontorizon/bsp-builderImage with all the dependencies to build BSPs (bootloader/kernel)
commontorizon/torizon-yocto-github-runnerImage with all the dependencies to run a GitHub runner for Torizon Yocto Builder
commontorizon/torizon-devImage for the Torizon IDE CLI tool torizon-dev
commontorizon/torizon-dev-tasksImage with all dependencies to be possible to run Torizon IDE tasks from CI/CD CLI
commontorizon/pwsh-gitlabImage to add support to write scripts to the Gitlab CI/CD yaml file

Conclusion

Yes, this post was longer than I would have liked, but I’m happy to share these differences and their motivations with you. Common Torizon images are not intended to compete with Torizon images, but rather to be complementary. They would not exist without the work of the Torizon containers and packages team. The idea is to have a more flexible organization so that the community can experiment and extend the functionality of Torizon images to meet their specific needs. With the feedback based in the experiments, the Torizon team can improve the Torizon images and provide a better experience for the community.

I hope you liked the post and that it was useful to you. If you have any questions or suggestions, please do not hesitate to contact me. Until next time!

SHARE

SHARE