BalenaOS vs Ubuntu vs k3os

Hello everybody :wave:,

First I wanted to thanks Balena for their amazing work :pray: and this community too for being there and making Balena a great product to work with :sparkles:.

As you can guess, I’m a passionate developer :man_technologist:, especially in developing containerised projects on Raspberry Pi so that everybody can use them at home in a very simple way :hatching_chick:.

My goal here is to prepackage everything so that an end-user (who have never touched a terminal in his life) only need to:

  • flash a .img on their Raspberry Pi
  • (optionnal) if they want to connect via Wi-Fi, edit a config file available on a boot partition to add their SSID/ password

My project is working with 5 containers / images available on Dockerhub, and the goal is to always pull the latest tag of these images, so that the whole project is updated to the latest version whenever a Raspberry Pi is rebooted :arrows_counterclockwise:.

I can see that, as of today, :three: main options are available to me:

  • Going with Ubuntu for Raspberry Pi, and using cloud-init to bootstrap the project (installing Docker / docker-compose, downloading the docker-compose.yaml, and launching it)
    One drawback that I can see, is that Ubuntu is not particularly optimised for containerised apps.

  • Going with k3os, and using k3os config (cloud-init like) to bootstrap the project (apply k8s remote conf).
    The OS should be optimised for containerised apps, however, the building of a custom OS image to simply “flash a .img” and get it working does not seems easy :exploding_head:.

  • Going with BalenaOS
    Here I need your help to know if it’s possible to modify a balena-os.img to add my docker-compose.yaml so that an end-user could simply “flash a .img” and get it working.
    The goal is also not to be linked to Balena Cloud and/or Open Balena but to just use BalenaOS to run apps on Raspeberry Pis.

Thanks a lot for your time!

1 Like

Hi @pcorbel, I can’t comment on those other options as I don’t have experience with them but I can say what you want is what we’ve been working on with balenaHub (https://hub.balena.io/). balenaHub allows you to create public fleets that users can easily join with their devices without them having to create a balena account, so they just download an .img file and are good to go.

The FAQ section on hub.balena.io will get you up to speed but here is a summary.

For developers
balenaHub uses balenaCloud backend infrastructure so if you are familiar with it it should be pretty easy to setup. Only you as a developer will need a balenaCloud account, which you’ll use to create software releases for your balenaCloud application by pushing a docker-compose.yml file as usual.

For users
You’ll need to direct users to your fleet card on balenaHub, from there they will be able to download an img file to flash their device, all without any type of login required. Once they flash and boot their device it will start downloading the latest release. Users will also get updates whenever you push a new release.

balenaHub is relatively new and it’s still under heavy development so this is a great time for you to chime in and help us shape the roadmap. If you have any suggestions or ideas of features that would make your life as a developer (or user) easier please do let us know!

An example of a feature we are working on is offering preloaded images by default. Currently if you download an img from hub (or balenaCloud) you get a fresh balenaOS image but the actual application release is only downloaded when the device first boots and connects to the internet. We are working on having the application release already bundled in the img so that users don’t have to wait for it to download.

Also, forgot to comment on the optional wifi connectivity. balenaHub img download modal offers the ability to plug in wifi credentials for users. We also have WiFi-Connect, an utility to setup wifi at runtime (repo here GitHub - balena-os/wifi-connect: Easy WiFi setup for Linux devices from your mobile phone or laptop, and here is a drop-in container GitHub - balenablocks/wifi-connect: Easy WiFi setup for Linux devices from your mobile phone or laptop).

Thanks a lot @tmigone, I’ll try it out!
One question though: Is there a limit in term of “free” devices we can add to a project?

Hi @pcorbel,
yes, I confirm that by using the free plan you will actually have a limit of 10 devices.
If more devices are needed then I would redirect you to balena - Scale pricing from prototype to enterprise usage .

That is very sad ;(
I thought by open-sourcing our code and pushing it via Balena, we could have had an unlimited number of devices…
I’ll stay with Ubuntu so that I can distribute my app free of charge :frowning:

Hi @pcorbel,
I am sorry for the wrong information I just gave you. If the code is open source, by making the application public, you will have no device limitations. The link I passed above refers to all the free applications that do not want to be published on balenahub.
This can be done by entering the settings page of the application and changing the application visibility setting.

That is wonderful news! (and more aligned with the spirit of balena hub :wink:)
Thanks!