
Ask HN: GUIs on embedded linux, oh my - voxnix
By day I am not an embedded developer; by night I&#x27;m trying to be. I have an i.MX6 (solo) based device that I ultimately intend to sell in [very] small quantities for a niche market. In other words, this is closer to a hobby than an actual business.<p>One of the requirements is a very attractive and responsive UI. Based on my research Qt seems the best fit, but its LGPL restrictions and very expensive commercial license makes it almost impossible for me to choose. Qt wants $6,600 up front plus royalties and afterwards a subscription for support. I&#x27;m just a guy trying to build a thing... I can&#x27;t afford that!<p>Trying to look for alternatives has been frustrating. The practicality of HTML5 on my platform isn&#x27;t sure to me. To real embedded linux developers out there, please tell me what you use for your GUIs? It needs to be something of similar quality to a car infotainment system.
======
joezydeco
Current commercial Qt developer on iMX6 here.

You can use the LGPL version of Qt as long as you use dynamic linking to the
Qt libraries and provide for the other things in the agreement (like letting
users access the Qt source code, provide a way to update libs, etc). I haven't
had a need to modify the libraries at all, I'm using a vanilla build for ARM
right from the Yocto output.

In my opinion (been doing this for 25 years) Qt is the only embedded UI that's
worth using these days. I stick with 4.8 and don't use Qt5 or QML, although
you probably get a lot more performance out of the system that way and get to
harness the accelerator under OpenGL.

Qt4 on 6Solo works fine enough for me and it's dead simple to do stuff like
talk to lower-level drivers or make a Windows version for demonstration.
Freescale supports enough of the backend stuff to use gStreamer and ALSA. I
like that.

I recently tore down a car infotainment system that used iMX6 and Opera as the
UI. The backend was all in Javascript. It looks like hell to develop for, but
then again I don't work in Javascript all day.

~~~
voxnix
Thanks so much for your answer. For an embedded device, what's a recommended
way to make it so my users could change out their Qt libraries as required?
From my inexperienced POV it sounds horrible - I'd have to create some kind of
custom update for them, provide them the tools to build Qt, and probably
something else I'm missing in my understanding of the LGPL.

Also I was hoping to use Qt5 if that makes a difference (QML seems nice..).

~~~
joezydeco
I've pondered the same question and I really have no clear answer.

But I also think you're not obligated to provide as much as you think. You
have to provide source (easy enough), but you really don't have to actually
give them all the tools to build it do you? Be nice and point to the Yocto
build you used and say you got your gcc toolsuite from there.

As for installation, all you really need to do is provide a way to _replace_
the libraries. I wouldn't give out an entire rebuild/reflash suite or
anything. Make a hidden screen in the program somewhere to let you mount a USB
drive and replace the libQt?.so.4 files. And that's it. If they brick it, you
shrug and say "not my deal".

In all my time I've never encountered anyone that actually wanted to _do_ any
of this. It's all a formality, especially when Qt literally does everything
you need. I'm not even really sure what you would want to hack on Qt in the
first place.

~~~
voxnix
I can't imagine why anyone would want to do it other than to mess with me.
However, as there is a competing product that could be a possibility.

~~~
joezydeco
Ah, you think someone would do this to brick a device they don't own in the
field?

Then I would make the method accessible, but behind some kind of
authentication method. User mails you and asks for the way to install it, once
you've verified it's really them you provide the _unique_ backdoor to that
machine. Might be one way to approach it.

You can burn a unique serial number or whatever directly into the IMX6,
there's a eFuse/OTP driver that lets you access it from the filesystem.

~~~
voxnix
I don't think they would sabotage a device in the field, but they would check
my compliance with the LGPL in hopes they could hang me on it. Maybe, I've
really no idea. Would hate to find out.

Great tip on the eFuse and an authentication method! Have you ever released a
product built with Qt under the LGPL?

~~~
joezydeco
I'd need to catch up with what happened in the BMW i3 case to understand what
your obligations are to people that don't own the actual target device. At
minimum, you provide a link to a repository you control with the vanilla Qt
source. That should satisfy the requirement, right?

Installation of a modified library would seem (to me at least) to be a method
you can share only with authorized owners.

I've released Qt products under LGPL, but they're all industrial equipment and
I've never had a customer give any of this a second glance. They just want
their shit to work.

------
twotavol
Qt is basically unrivaled in this space in my opinion. If you really control
your hardware and software, it seems like its easier for you to just comply
with the LGPL requirements. You can find some other vendors for similar
software with Google but they aren't as 'attractive' and 'responsive'. That
being said I think IVI systems will start looking at web rendering soon if
they haven't already. If the LGPL is a show stopper for you, you can always
give CEF a shot to see if its fast enough (though I've always been confused
about CEF because I thought it used WebKit which was LGPL)

Also depending on how complex your UI is going to be you can always take the
crazy route and roll your own. If your scope is very specific and limited, it
wouldn't be that bad.

~~~
voxnix
Based on some quick research building CEF for the imx6 doesn't look trivial.
Do you know of any devices (for sale) that do use Qt under the LGPL? Or in
your experience does everyone get the commercial license?

