[QtonPi] QtonPi SW stack

rajiv.ranganath at nokia.com rajiv.ranganath at nokia.com
Fri Feb 3 11:14:02 CET 2012

Hi All,

We're getting closer to be able to ship Raspberry Pi as soon as it
becomes available to QtonPi community.

Now that Raspberry Pi Foundation has started blogging details around
libraries, codecs and kernel [1] [2], I wanted to share with you some
thoughts on were we are with things and where we would like to go.

We *really* appreciate your comments and feedback.

Brian and myself will be at FOSDEM and we'll be covering some of this in
our presentation on Saturday [3]. If you are going to be there, lets
plan to get together and discuss more.

Following are things that are now set up, open and running,

- QtonPi Mailing List (obviously!)
- Wiki, with some initial documentation on cross-build tools [4]
- Gerrit Codereview / Gitorious [5] [6]
- QtonPi toolchain (under the hood you'll find a Linaro GCC 4.5.4

What we've _not_ yet posted are,

- Raspberry Pi specific binaries (OpenGL libraries, Bootloader, Codecs
  etc.,) We're waiting for Raspberry Pi Foundation to make the release.

- QtonPi platform image (Fedora based for now, see below!)

- Qt 5 Source RPM. In order to build Qt 5 you'll need access to header
  files from Broadcom's OpenGL ES library.

- Documentation on how to get toolchain + sysroot + Qt Creator working
  to develop apps

We hope to have this ready before Raspberry Pis start arriving at your

I would now like to share with you our _current_ thinking on QtonPi SW
stack. This is just a starting point for a conversation, and what we
eventually end up doing will depend largely on all of us - i.e., QtonPi

Before getting started, I want to get something out of the way.

The Qt Project (and Qt Essentials in particular) will always aim be
cross-platform and this includes getting Qt 5 well supported and
integrated into as many Linux Distributions (Embedded and Desktop) as
possible. More widespread Qt 5 becomes, better it is for all of us!

With QtonPi, we want to be an innovation environment where we can try to
do interesting things with Qt 5 + Embedded Linux, which would be
somewhat difficult to do under the constrains of a more established
distro project. Some examples of this might be,

- Having to worry about supporting other hardware platforms besides
  Raspberry Pi (and probably ending up doing an equally bad job on all

- Thinking about legacy X11 App Support or Endlessly justifying why Qt
  is better than other toolkits out there etc., etc.,

With the disclaimer out the way, I'm going to be breaking down QtonPi
stack into three layers. These layers exist because we can then have
deeper conversations around specific topics in the SW stack that
interests us and for our community to self organize around areas that
we're most passionate about.

1. Base Layer

2. Middleware

3. Apps

1. Base Layer

Base Layer essentially consists of everything above the hardware
providing all the enablers to run our middleware. This includes -
boot loader, codecs, kernel, root filesystem, RPM packages, compiler,
build environment, etc.,

2. Middleware

Our middleware consists of Qt 5 (plus additional optional modules where
it makes sense) and a Qt Creator based QtonPi SDK for App Creation along
with all the community documentation we can put together.

That's it! Nothing more, nothing less.

The programming models that we will support would be,

- Qt C++
- JavaScript

For UI, you can use,

- QML (or)
- HTML (though QtWebKit)

3. Apps

Interesting Apps is something that we hope our community will create, so
that we can build a better Middleware and Base Layer.

We might have scenarios where we might not be able to provide all the
APIs needed for folks trying to do some really cool Apps with QtonPi.

We should however make it easy both at the Base Layer and Middleware for
folks to be able to add their own APIs where necessary and provide all
the freedom for App Developers innovate.

Now, some thoughts on what we might want to aim for in terms of
releases. Applying my immense creativity, I'll refer to them as
Release-0, Release-1, Release-2


We should and will try to get Release-0 out *asap*. For Release-0, we
would include,

* Base Layer

  - Fedora RPM Packages plus some additional Raspberry Pi Specific

  - Linaro GCC 4.5.4 toolchain

  - QtonPi Cross-build tools

* Middleware

  - Documentation on how to get toolchain + sysroot + Qt Creator working
    to Develop Apps

  - Qt 5 running on full-screen EGFS mode. We'll probably include the
    code-freeze version of Qt 5 and update it as we move along.


Once we get Release-0 out of the way, we can start working towards
Release-1, maybe sometime in spring this year.

Release-1 probably will be the first release where we could start seeing
some of the innovations that we spoke about earlier.

* Base Layer

  - We plan to introduce QtonPi based on OpenSuse packages, with some
    interesting properties.

    The OpenSuse QtonPi packages will be commercially friendly, which
    means that we'll avoid integrating any GPLv3 packages, etc., This is
    to give QtonPi community a starting point if they want to apply the
    stack in commercial projects. Of course the usual disclaimers
    apply - you're advised to conduct your own due-diligence, No reps,
    warranties etc.,

    Secondly, it'll be super upstream friendly. Our goal is to upstream
    as much as possible, and only when we can't upstream something (for
    e.g., due to upstream using a different license) maintain those
    changes in QtonPi project.

    So, Why OpenSuse and why _not_ X, Y, Z (where X, Y, Z = your
    favorite distro)? We realized this could make some folks unhappy
    (including me!), because our favorite distro did not get chosen. The
    decision was based largely on what we're able to contribute with a
    reasonable level of certainty, while preserving the two properties
    of being commercially and upstream friendly.

  - Build Environment - We'll introduce a build environment that can
    handle both native cross-build and self-hosted builds that are OBS

  - Updated Compiler - Move to a GCC 4.6 compiler

  - Introduce the new process manager (a project that'll be Open Sourced

  - Qt-JsonDB integration to support App Development

* Middleware

  - QtonPi SDK delivered as an installer with integrated toolchain +
    community documentation

  - Auto configuration/discovery of Raspberry Pis from QtonPi SDK

  - Qt 5 running (still) on Full Screen EGLFS mode

Around this time or even sooner if you guys/gals prefer, I think we should
start discussing about how to handle two somewhat complicated, and
interrelated issues.

- Support for Multimedia
- Support for Multi-Process Qt/Qt Quick Apps

Raspberry Pi foundation would be making available Broadcom's OpenMax
libraries, but at the moment, the somewhat preferred way for Qt
Multimedia to integrate with hardware is through GStreamer and Pulse
Audio. Then there is the issue of rendering video directly onto an EGL
texture. This is something that we'll need for both Qt and QtWebKit.

In order to do Multi-Process Qt/Qt Quick Apps, we'll need to be able to
share textures between processes. This has dependencies with the Kernel
and also Broadcom's OpenGL libraries.

We can hack around Qt to get some of this working. However, my
preference would be do this the right-way. In our QtonPi community,
we've some of the best people on the planet who know how to make this
work, so we should aim high, set an example, and push the boundaries for
graphics and multimedia integration.


Release-2 will probably be a summer release hopefully around the
same time as we do our first Qt 5 release.

A lot will depend on how much progress we're able to make but following
might be a good wish-list to aim for.

* Base Layer

  - Migrate to a kernel version that supports CMA
  - Update or add packages to support Multimedia and Multi-process Qt/Qt
    Quick Apps
  - Provide an example compositor environment based on qt-compositor and
    process manager

* Middleware

  - Update QtonPi SDK to include the release version of Qt 5
  - Improve community documentation

After Release-2, we can probably consider doing a release based on Qt
project release schedule. We can discuss/plan for it during Qt
Contributors Summit.

Thank you for reading this far and please let us know what you think,
where and how you would like to contribute.


[1]  http://www.raspberrypi.org/archives/592
[2]  http://www.raspberrypi.org/archives/574
[3]  http://fosdem.org/2012/schedule/event/intro_to_qtonpi_project
[4]  http://wiki.qt-project.org/QtonPi/Contribute#Cross-build_tools
[5]  http://qt.gitorious.org/qtonpi/mt-cross-tools
[6]  http://codereview.qt-project.org/#admin,project,qtonpi/mt-cross-tools,info

More information about the QtonPi mailing list