/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
  \page wayland-and-qt.html
  \title Wayland and Qt
  \brief An overview of the Wayland protocol and how it fits into Qt.

  \l {https://wayland.freedesktop.org/}{Wayland} is a display server protocol
  that helps you to create multi-process systems. Multiple client applications
  ("clients") can render their own content to off-screen buffers. These buffers
  are then passed to a display server, often called a compositor, using the
  Wayland protocol. Finally, the compositor composites and positions the
  content on a physical display.

  \section1 Why Use Multi-Process

  In a single-process system, all parts of the UI run in one, single process.
  In a multi-process system, all clients run in their own, dedicated process.
  With Qt, at any point in your development process, you can choose to switch
  between single-process and multi-process.

  \image ../images/wayland-multi-process.png
  \caption Multi-Process Client Architecture

  \image ../images/wayland-single-process-eglfs.png
  \caption Single Process Client Architecture

  The use of multi-process has the following benefits:

  \list
    \li \l{stability}{Stability}
    \li \l{security}{Security}
    \li \l{performance}{Performance}
    \li \l{interoperability}{Interoperability}
  \endlist

  \target stability
  \table 100%
    \header
      \li {2,1} Stability
    \row
      \li Easier to recover when clients hang or crash
      \li If you have a complex UI, then multi-process is useful because if one
          part of the UI crashes, it doesn't affect the entire system.
          Similarly, the display won't freeze, even when one client freezes.

          \note If your client is mandated by law to render safety-critical
          information, consider using
          \l{https://doc.qt.io/QtSafeRenderer/qtsr-overview.html}{Qt Safe Renderer Overview}.
    \row
      \li Protection against possible memory leaks
      \li In a multi-process system, if one client has a memory leak and
          consumes lots of memory, that memory is recovered when that client
          exits. In contrast with single-process, the memory leak remains until
          the entire system restarts.
  \endtable

  \target security
  \table 100%
    \header
      \li Security
    \row
      \li In a single-process system, all clients can access each other's
          memory. For example, there's no isolation for sensitive data
          transfer; every line of code must be equally trustworthy. This
          isolation is there, by design, in multi-process systems.
  \endtable

  \target performance
  \table 100%
    \header
      \li Performance
    \row
      \li If you have a CPU with multiple cores, a multi-process system can
          help distribute the load evenly across different cores, making more
          efficient use of your CPU.
  \endtable

  \target interoperability
  \table 100%
    \header
      \li Interoperability
    \row
      \li You can interface with non-Qt clients in a multi-process system, as
          long as your clients understand Wayland or X11. For example, if you
          use gstreamer for video or if you want to use a navigation
          application built with another UI toolkit, you can run these clients
          alongside your other Qt-based clients.
  \endtable

  \section1 Why Use Wayland Instead of X11 or Custom Solutions

  X11, a desktop protocol from the 80s, no longer fits with how graphics
  hardware works today. It is large, complex, and lacks customizability. In
  fact, it is difficult to run a client fluidly with X11, and reach 60 fps
  without tearing. Wayland, in contrast, is easier to implement, has better
  performance, and contains all the necessary parts to run efficiently on
  modern graphics hardware. For embedded, multi-process systems on Linux,
  Wayland is the standard.

  However, if you are working with old hardware or legacy applications,
  then Wayland may not be a good option. The Wayland protocol is designed with
  security and isolation in mind, and is strict/conservative about what
  information and functionality is available to clients. While this leads to a
  cleaner and more secure interface, some functionality that legacy
  applications expect may no longer be available on Wayland.

  Particularly, there are three common use cases where Wayland may not be the
  best option:
  \list 1
    \li The hardware or platform is old and only supports X11; in which case
        you have no choice.
    \li You have to support legacy applications that depend on features that
        are absent in the Wayland protocol for security and simplicity.
    \li You have to support legacy applications that use a UI toolkit that
        doesn't run on Wayland at all. In some cases, you may be able to work
        around this by running those applications on
        \l{https://wayland.freedesktop.org/xserver.html}{XWayland} instead.
  \endlist

  Back when X11 was very popular, developers wrote their own custom solutions
  to circumvent X11 issues. Older Qt versions had the Qt Windowing System
  (QWS), which is now discontinued. Today, most of these use cases are covered
  by Wayland, and custom solutions are becoming less and less common.

  \section1 Possible Trade-Offs with Multi-Process

  Use of multi-process systems do bring about the following trade-offs:

    \list
    \li \l{increased-video-memory}{Increased video memory consumption}
    \li \l{increased-main-memory}{Increased main memory consumption}
    \li \l{repeated-storage}{Repeated storage of graphical resources}
  \endlist

  \target increased-video-memory
  \table 100%
    \header
      \li Increased video memory consumption
    \row
      \li This can be a constraint for embedded devices. In multi-process, each
          client needs to have its own graphics buffer, which it sends to the
          compositor. Consequently, you use more video memory compared to the
          single-process case: where everything is drawn at once and there is
          no need to store the different parts in intermediary buffers.
  \endtable

  \target increased-main-memory
  \table 100%
    \header
      \li Increased main memory consumption
    \row
      \li Apart from some extra overhead at the OS level, running multiple
          clients may also use more main memory as some parts need to be
          duplicated once per client. For example, if you run QML, each client
          requires a separate QML engine. Consequently, if you run a single
          client that uses Qt Quick Controls, it's loaded once. If you then
          split this client into multiple clients, you're loading Qt Quick
          Controls multiple times, resulting in a higher startup cost to
          initialize your clients.
  \endtable

  \target repeated-storage
  \table 100%
    \header
      \li Repeated storage of graphical resources
    \row
      \li In a single-process system, if you're using the same textures,
          background, or icons in many places, those images are only stored
          once. In contrast, if you use these images in a multi-process system,
          then you have to store them multiple times. In this case, one
          solution is to share graphical resource between clients. Qt already
          allows sharing image resources in main memory across processes
          without involving Wayland. Sharing GPU textures across processes, on
          the other hand, requires more intricate solutions. Such solutions are
          currently in development for the Qt Wayland Compositor.
  \endtable

  \section1 What Qt Wayland Offers

  \b{For Clients}
  \br
  Qt clients can run on any Wayland compositor, including Weston, the reference
  compositor developed as part of the Wayland project.

  Any Qt program can run as a Wayland client (as part of a multi-process system)
  or a standalone client (single-process). This is determined on startup, where
  you can choose between the different backends. During the development process,
  you can develop the client on the desktop first, then test it on the target
  hardware later. You don't need to run your clients on the actual target
  hardware all the time.

  \image ../images/wayland-single-process-develop.png
  \caption Single-Process Client Development

  If you develop on a Linux machine, you can also run the compositor within a
  window on your development machine. This lets you run clients in an
  environment that closely resembles the target device. Without rebuilding the
  client, you can also run it with \c{-platform wayland} to run it inside the
  compositor. If you use \c{-platform xcb} (for X11), you can run the client on
  the desktop. In other words, you can start developing your clients before the
  compositor is ready for use.

  \b{For Servers}
  \br
  The server, or compositor, connects to the display and shows the contents of
  each client on the screen. The compositor handles input and sends input
  events to the corresponding client. In turn, each client connects to the
  compositor and sends the content of its windows. It's up to the compositor to
  decide:

  \list
    \li How and where to show the content
    \li Which content to show
    \li What to do with the different client graphics buffers
  \endlist

  This means, it's up to the compositor to decide what a multi-process system
  is. For instance, the clients could be part of a 3D scene with windows on the
  walls, on a VR system, mapped to a sphere, and so on.

  The Qt Wayland Compositor is an API for building your own compositor. It
  gives you full freedom to build a custom compositor UI and manage the windows
  of various clients. You can combine both Qt Quick and QML with the Qt Wayland
  Compositor to create impressive, imaginative UIs. For more information, see
  \l{Qt Wayland Compositor}.

  \section2 Related Content
  \list
    \li \l{https://resources.qt.io/qt-world-summit-2017/qtws17-qt-wayland-compositor-creating-multi-process-user-interface-johan-helsing-the-qt-company}{QtWS17 - Qt Wayland Compositor: Creating multi-process user interface}
    \li \l{https://doc.qt.io/QtApplicationManager/introduction.html}{Qt Application Manager}
  \endlist

*/
