Released and Certified: Qt Safe Renderer
blog.qt.io
blog.qt.io
These certs open the door for medical devices, which is great.
I work on Class 1 medcial device. We have customers and regulatory people saying I can't even use Qt because we compile it ourselves. Apparently, once we have access to the source code, we must bring the software up to our target safety class.
This of course isn't feasible. Apparently, this even applies to the kernel.
My regulatory people are demanding that we hire someone like WindRiver to deliver use pre-compiled images and tool chains, removing the source from our hands.
I don't follow regulatory closely, but this has got to be wrong. Are you saying that I can never use open source software? Even if the software has these certs like this (Safe Render)? Surely we can still treat 3rd party libs as SOUP, even if we have the source, yeah?
I mean, these projects typically have thorough tests.
However, if I use SOUP, I'm responsible for bugs. How would I debug with no source?
I don't work in the field, but just because you're using a certified binary doesn't mean no source can ever be associated with it for debugging.
Continuing the example of a certified binary of openssl from a third party (say version 1.1.0h), I'd expect you to be able to debug the certified binary using a version-matched source tarball from the openssl website [1].
Yocto all generates checksums for all inputs and outputs, caching intermediate build steps, ensuring consistency in the build process.
Also, Yocto will not compile anything with your local/native gcc toolchain. It will however use your local gcc toolchain to build it's own gcc toolchain, which it will then use to build all the relative recipes. This again ensures build consistency across platforms/machines.
If the argument is purely a "well, I can't audit the produced binaries", I'd argue that you can audit the build system in great detail.
[0] https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/re...
"Sure, we do use the precompiled binaries. We can even prove it because they have the same hash, and our procedure fails if they don't"
How you obtained your binary is immaterial, if you can prove it's the same as the audited one. Surely regulatory people would accept that?
Since this is a daunting task to verify something like QT, now you can at least pay for the certified version, and point some of your risk mitigations directly to the QT specifications/FMEA/Test results.
The usual strategies to avoid having to validate a huge external SW is to either have HW redundancies, or to segregate it completely from your main SW so that any failure of your SOUP is harmless.
As I enable features in the Kernel, or add dependencies, they are driven based off of some functionality of our GUI/device which is tested/validated before each release.
So, if I enable squashfs in the kernel, and I can boot my box (which uses it), I can say that I have tested the requirements needed from the Kernel.
If I add in openssl for TLS connection to mobile devices and have validation in place to ensure connectivity, I can say that I have tested the required functionality of openssl.
I'd think this would be enough, but I never can seem to satisfy regulatory people. They are (in general) not very technical.
I'm not trying to get consultation services from HN, but for the sake of discussion, these devices are recorders used for post-op educational purposes. External/separate monitors are used for the actual operation.
I bring this up because the risk is very low, yet I have had multiple customers who wish to distribute our product ask about this.
This is turning into more of a rant than anything. I'll end with this comment.
Until now these indicators were almost always actual physical lamps; the information displays often found in the center between tacho- and speedometer don't use any kind of fancy graphics at all; they're mostly just black and white LCDs driven by the ECU over the CAN bus.
It's really incredible how the world of software developed by adults differs from the software developed by kids.
It's not quite like Qt but it tries to follow the same style. The quality is not quite up to par with Qt either but it was definitively good enough for the internal projects.
>but don't pretend like they don't have tremendous benefits too.
Javascript+html+css is not a global optimum in the solution space of "making cross platform GUI apps", its just the best solution that exists right now (if you are afraid of C++), and that is too bad.
We could have simpler, better performing ways if we bothered to do things that aren't web related more often.
Qt's cross-platform support is amazing.
Iterating front-end development with Javascript+html+css is simpler and quicker than doing the same with C++ because you don't have to recompile for each iteration. In some cases I don't even need to restart the app.
Also, I have been able to debug in a few nasty cases by getting users to switch out a js/html file and restart the app. That's impossible to do with C++ given the same time/effort constraints.
Those are just two fairly small but measurable examples. There are also drawbacks to having not chosen Qt for the front-end. But those data points and more were part of a rather complicated cost-benefit analysis of what was available to make a cross platform GUI app in a reasonable amount of time.
I don't see what a search for a "true" toolkit has to do with such an analysis. I don't see what caricatures of one camp or another as unduly emotional has to do with such an analysis. What am I missing?
Now tell me, what do native apps get you over Electron apps? Demonstrably happier customers? Or just the personal satisfaction of knowing your app is a "global optimum" or whatever?
what makes you say that ? I develop a C++/Qt app and fix bugs and add new features without any problems and without having to care to mac / windows / linux specific stuff.
I'd say what you are arguing is "my team is better at JavaScript than Qml/JavaScript/C++", which is fine. It really boils down to what the team is most comfortable writing in.
That aside, Qt definitely wins when compared to Electron.
Well, if I may... What actually tells adults and children developers apart is their swift ability to bring nuances (like in 'pros n cons') on the table when choosing the more efficient techno for a given problem. Yes, Qt has great pros. No, Qt is obviously not The Silver Bullet.
Obviously, but that is entirely orthogonal to the language used.
The customisations one needs to implement are far easier.
I still hope a mix of WebComponents and WebAssembly will fix the eco-system.
I don't really agree with this sentiment. JavaScript has become one of the better languages to work in these days. I'd much rather work in JavaScript than C++ any day.
Or to put it another way, if we an pick some UI components and marking them as safety critical' somehow improves their reliability, why would you not mark everything as safety critical?
Does the safety factor decrease as more and more components enter the safety critical section? Why not subdivide the UI into more than just one 'critical' process and one 'non-critical' process, e.g. perhaps a light-weight process per component?
The short answer tho, is that "the tooling separates out the safety-critical elements for execution by the Qt Quick Renderer run-time."
In these domains, safety-critical information has to be displayed by certified hardware/software; QT Safe Renderer just got certified and released.
Yes, the certifications on the aviation side are DO-178C for Software and DO-254 for Airborne Electronic Hardware. Rather than SIL or ASIL (Automotive Safety Integrity Level), the aviation equivalent is DAL (Development Assurance Level). Of course, while they each use letters for levels of Integrity / Assurance, in aviation DAL A is the most stringent and in automotive ASIL-D is the most stringent.
https://www.rapitasystems.com/blog/what%E2%80%99s-difference...
https://www.tuev-sued.de/plants-buildings-technical-faciliti...
Qt supports VxWorks, QNX and INTEGRITY platforms commonly used for safety critical software.
So is this a completely separate implementation from Qt proper? Do they share some API and tooling?
So the Qt libraries or QML renderer are still not certifiable.
But that is okay. Isolating the core components that have the highest safety requirement and developing the rest to a lower standard is accepted and good practice. You also need to have an operating system that enforces the separation and a design that guarantees that the safety critical part cannot be disrupted by failures in the rest of the system.
For example, a fancy navigation map display is not safety critical at all and developing that to ASIL standards would be madness. Icon ovelays for engine or braking system failures are quite important, on the other hand. Separating then out into a different process and making sure that it cannot be affected by a misbehaving navigation system is just common sense. So even with the current limits, this is very useful.
That also limits the benefits of Qt Safe Renderer. I think it is mostly a marketing thing within the automotive sector. The competitors there (Disti, Kanzi, etc) have their "solutions" for safety critical and say Qt can't handle it. So Qt needs to check the box of "safety critical" to fend for themselves.
Tell tales can quite simply be implemented by hand coding. But there is OpenGL SC which possibly could support more fancy and certified graphics. It could be nice if Qt/QtCreator/Qt3dStudio supported that in some manner. Having a layer that is safety critical and separated out to it's own OpenGL SC code. The usual argument for this kind of stuff is that nice graphical ADAS features (think advances HUDs) will need this (although I think it is still reasonable to hand code it in OpenGL SC).
commercial license costs + not redistributable (example, if included in a BSD or MIT library/framework/tool...)
or LGPL (also requires project to be LGPL)
just checking, as it's a factor in why Qt is not universal, but only ubiquitous, which is still a good thing, because "diversity" and not wanting to put the fate of all gui forever into the hands of one entity etc..
but: any other declarative (like qml) gui frameworks out there in Linux land?
This is not correct. LGPL only requires that Qt is linked as shared libraries and sources of any changes to the Qt itself is provided.
I don't see how the license is a problem. It used to be not 100% open source but it is now, and it has a commercial license if you don't want to open source your program. You can also dynamically link to LGPL versions of the library from your program. [1]
In any case, to answer the question, you have guile gnome [2] which sort of does the same thing but in a scheme language.
[1] https://softwareengineering.stackexchange.com/questions/8614...
LGPL does not require the project to be LGPL. It simply means that you must provide users means to link your program to a version of Qt that they've compiled, or you provide the source of the Qt distribution that you compiled to build your application. You can have a commercial, closed-source, application using LGPL Qt.
"A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License."
Contrary to popular belief you can even statically link an LGPL library and remain closed source, but you may need to distribute your object files so that someone can statically link a different library version with your code.
I'm not sure what happens if you modify Qt in some way though, presumably you're still covered if you release the modifications you made.
Full answer here: http://answers.google.com/answers/threadview/id/439136.html
1: https://doc.qt.io/qt-5/qtmodules.html#gpl-licensed-addons
For charting, Qwt is a pretty mature library now. The documentation is somewhat sparse, but complete if you look at the Doxygen + examples as well. The author is active on the Qt forums too.
you can release a statically linked version and share your compiled proprietary object files (+ build instructions) ; that's enough to comply with LGPLv3
You have to either
1) dynamically link to QT libraries, or
2) provide object files that can be statically linked against LGPL libraries.