/poco

Portable Compositor

Primary LanguageCGNU General Public License v3.0GPL-3.0

POCO - POrtable COmpositor

Introduction
============

The goal of this project is to provide one composite window manager that is portable through
multiple window protocols and focused for Embedded Linux.

These multiple window protocols are namelly Wayland and X11. But the abstraction should make
it possible to write for different window protocols.

Motivations
===========

All current Window Managers available are super tight with their DE, big code base, hard to
maintain, not portable to different platforms and window protocols.

Usually all major embedded project that needs to develop their own shell and DE are forced
to write their own Window Manager as well. We want to avoid this.

Design
======

The design is inspired by the driver framework model in the Linux kernel. Basically platform
specific source codes, such as machine and board, can set platformdata structes that contains
the actual platform specific code, such as IRQ numbers, GPIO numbers, function callbacks to
perform various things.

We should be able to provide an abstraction model to provide this flexible approach. A way
that a user of the window manager can set their preferences in terms of effects, decorations,
behavior, etc. The idea is to make the window manager really fast and simple, so most of the
configuration would be in compile time.

Our focus is Embedded Linux. With this in mind we can set a smaller and specific use cases for
poco. Which will make code simpler, faster and smaller.

Implementation
==============

Probably use C since it's small and fast and XCB and Wayland are using C as well.

Start implementation without any other library dependency. Add dependency only if necessary.
Try as possible not to be dependent on big libraries, but if necessary use GLib.

Window Protocols
================

Focus in supporting Wayland and X11 for Embedded Linux.

This will make our life simpler in terms of supporting ICCCM and EWMH. Just implement standards
that are required for our use cases.

Use Cases
=========

Make sure we support Qt4 and Qt5, Gtk and EFL. That's probably will cover most cases.

TODO: continue to write about it....