Enlightenment: A Cross Platform Window Manager and Toolkit

Dealing with Enlightenment portability issues in FreeBSD and elsewhere

Daniel Kolesa Samsung Open Source Group [email protected] @octaforge FOSDEM 2015 State of the ecosystem

Where are we now? I During the last few years - drastic change of ecosystem

I Graphics stack in kernel

I

I High level components depending on low level stuff (libudev)

Overview I Graphics stack in

I Systemd

I High level components depending on low level stuff (libudev)

Overview

I During the last few years - drastic change of ecosystem I Systemd

I High level components depending on low level stuff (libudev)

Overview

I During the last few years - drastic change of ecosystem

I Graphics stack in Linux kernel I High level components depending on low level stuff (libudev)

Overview

I During the last few years - drastic change of ecosystem

I Graphics stack in Linux kernel

I Systemd Overview

I During the last few years - drastic change of ecosystem

I Graphics stack in Linux kernel

I Systemd

I High level components depending on low level stuff (libudev) I Lagging behind

I Losing compatibility with Linux stuff

I Custom solutions needed

I (or wrapper shims)

I (trying to avoid that)

BSDs in the ecosystem I Losing compatibility with Linux stuff

I Custom solutions needed

I (or wrapper shims)

I (trying to avoid that)

BSDs in the ecosystem

I Lagging behind I Custom solutions needed

I (or wrapper shims)

I (trying to avoid that)

BSDs in the ecosystem

I Lagging behind

I Losing compatibility with Linux stuff I (or wrapper shims)

I (trying to avoid that)

BSDs in the ecosystem

I Lagging behind

I Losing compatibility with Linux stuff

I Custom solutions needed I (trying to avoid that)

BSDs in the ecosystem

I Lagging behind

I Losing compatibility with Linux stuff

I Custom solutions needed

I (or wrapper shims) BSDs in the ecosystem

I Lagging behind

I Losing compatibility with Linux stuff

I Custom solutions needed

I (or wrapper shims)

I (trying to avoid that) General portability tips I We have a very diverse ecosystem

I This includes a wide range of operating systems

I Not all operating system have the same features

I Writing portable software is painful, but very much worth it

I And the end result comes out cleaner

Overview I This includes a wide range of operating systems

I Not all operating system have the same features

I Writing portable software is painful, but very much worth it

I And the end result comes out cleaner

Overview

I We have a very diverse ecosystem I Not all operating system have the same features

I Writing portable software is painful, but very much worth it

I And the end result comes out cleaner

Overview

I We have a very diverse ecosystem

I This includes a wide range of operating systems I Writing portable software is painful, but very much worth it

I And the end result comes out cleaner

Overview

I We have a very diverse ecosystem

I This includes a wide range of operating systems

I Not all operating system have the same features I And the end result comes out cleaner

Overview

I We have a very diverse ecosystem

I This includes a wide range of operating systems

I Not all operating system have the same features

I Writing portable software is painful, but very much worth it Overview

I We have a very diverse ecosystem

I This includes a wide range of operating systems

I Not all operating system have the same features

I Writing portable software is painful, but very much worth it

I And the end result comes out cleaner I A big mistake we’ve done in the EFL

I We wrote code against Linux

I Every other platform is expected to implement the same APIs

I Wrappers then implement API shims

Don’t write against a platform I We wrote code against Linux

I Every other platform is expected to implement the same APIs

I Wrappers then implement API shims

Don’t write against a platform

I A big mistake we’ve done in the EFL I Every other platform is expected to implement the same APIs

I Wrappers then implement API shims

Don’t write against a platform

I A big mistake we’ve done in the EFL

I We wrote code against Linux I Wrappers then implement API shims

Don’t write against a platform

I A big mistake we’ve done in the EFL

I We wrote code against Linux

I Every other platform is expected to implement the same APIs Don’t write against a platform

I A big mistake we’ve done in the EFL

I We wrote code against Linux

I Every other platform is expected to implement the same APIs

I Wrappers then implement API shims I System specific APIs are often unnecessarily low level

I Low level → difficult to write

I Low level → difficult to maintain

I And a pain to port

I Also, every time you do it, a kitten dies

I Too late to save them now

Why is this wrong? I Low level → difficult to write

I Low level → difficult to maintain

I And a pain to port

I Also, every time you do it, a kitten dies

I Too late to save them now

Why is this wrong?

I System specific APIs are often unnecessarily low level I Low level → difficult to maintain

I And a pain to port

I Also, every time you do it, a kitten dies

I Too late to save them now

Why is this wrong?

I System specific APIs are often unnecessarily low level

I Low level → difficult to write I And a pain to port

I Also, every time you do it, a kitten dies

I Too late to save them now

Why is this wrong?

I System specific APIs are often unnecessarily low level

I Low level → difficult to write

I Low level → difficult to maintain I Also, every time you do it, a kitten dies

I Too late to save them now

Why is this wrong?

I System specific APIs are often unnecessarily low level

I Low level → difficult to write

I Low level → difficult to maintain

I And a pain to port I Too late to save them now

Why is this wrong?

I System specific APIs are often unnecessarily low level

I Low level → difficult to write

I Low level → difficult to maintain

I And a pain to port

I Also, every time you do it, a kitten dies Why is this wrong?

I System specific APIs are often unnecessarily low level

I Low level → difficult to write

I Low level → difficult to maintain

I And a pain to port

I Also, every time you do it, a kitten dies

I Too late to save them now I Write general code

I If you need any specific functionality, design a high level API for it

I Use this API from your code

I Write OS specific backends implementing this API

I Abstracted, high level, easy to write, easy to maintain

The right approach I If you need any specific functionality, design a high level API for it

I Use this API from your code

I Write OS specific backends implementing this API

I Abstracted, high level, easy to write, easy to maintain

The right approach

I Write general code I Use this API from your code

I Write OS specific backends implementing this API

I Abstracted, high level, easy to write, easy to maintain

The right approach

I Write general code

I If you need any specific functionality, design a high level API for it I Write OS specific backends implementing this API

I Abstracted, high level, easy to write, easy to maintain

The right approach

I Write general code

I If you need any specific functionality, design a high level API for it

I Use this API from your code I Abstracted, high level, easy to write, easy to maintain

The right approach

I Write general code

I If you need any specific functionality, design a high level API for it

I Use this API from your code

I Write OS specific backends implementing this API The right approach

I Write general code

I If you need any specific functionality, design a high level API for it

I Use this API from your code

I Write OS specific backends implementing this API

I Abstracted, high level, easy to write, easy to maintain I Plays an important role

I Keep your API simple and as general purpose as possible

I Don’t implement very specific features

I Instead always ask yourself a question:

I Can I generalize this? Can this be reused?

KISS principle I Keep your API simple and as general purpose as possible

I Don’t implement very specific features

I Instead always ask yourself a question:

I Can I generalize this? Can this be reused?

KISS principle

I Plays an important role I Don’t implement very specific features

I Instead always ask yourself a question:

I Can I generalize this? Can this be reused?

KISS principle

I Plays an important role

I Keep your API simple and as general purpose as possible I Instead always ask yourself a question:

I Can I generalize this? Can this be reused?

KISS principle

I Plays an important role

I Keep your API simple and as general purpose as possible

I Don’t implement very specific features I Can I generalize this? Can this be reused?

KISS principle

I Plays an important role

I Keep your API simple and as general purpose as possible

I Don’t implement very specific features

I Instead always ask yourself a question: KISS principle

I Plays an important role

I Keep your API simple and as general purpose as possible

I Don’t implement very specific features

I Instead always ask yourself a question:

I Can I generalize this? Can this be reused? I Write reusable code

I And actually reuse it

I The worst thing you can do is copy paste a snippet in 10 places

I Any update will force you to update it in all 10 places

Don’t repeat yourself! I And actually reuse it

I The worst thing you can do is copy paste a snippet in 10 places

I Any update will force you to update it in all 10 places

Don’t repeat yourself!

I Write reusable code I The worst thing you can do is copy paste a snippet in 10 places

I Any update will force you to update it in all 10 places

Don’t repeat yourself!

I Write reusable code

I And actually reuse it I Any update will force you to update it in all 10 places

Don’t repeat yourself!

I Write reusable code

I And actually reuse it

I The worst thing you can do is copy paste a snippet in 10 places Don’t repeat yourself!

I Write reusable code

I And actually reuse it

I The worst thing you can do is copy paste a snippet in 10 places

I Any update will force you to update it in all 10 places I Internal dependencies are bad

I They force you to maintain them

I They are not reusable even though they could be

I They hinder portability

No internal dependencies I They force you to maintain them

I They are not reusable even though they could be

I They hinder portability

No internal dependencies

I Internal dependencies are bad I They are not reusable even though they could be

I They hinder portability

No internal dependencies

I Internal dependencies are bad

I They force you to maintain them I They hinder portability

No internal dependencies

I Internal dependencies are bad

I They force you to maintain them

I They are not reusable even though they could be No internal dependencies

I Internal dependencies are bad

I They force you to maintain them

I They are not reusable even though they could be

I They hinder portability I Abusing compiler extensions might be tempting

I End result is often maintenance hell

I Porting such code to a new toolchain sucks

Do not lock youself to a toolchain I End result is often maintenance hell

I Porting such code to a new toolchain sucks

Do not lock youself to a toolchain

I Abusing compiler extensions might be tempting I Porting such code to a new toolchain sucks

Do not lock youself to a toolchain

I Abusing compiler extensions might be tempting

I End result is often maintenance hell Do not lock youself to a toolchain

I Abusing compiler extensions might be tempting

I End result is often maintenance hell

I Porting such code to a new toolchain sucks I DSLs allow you to reduce the amount of code

I They increase readability of your code by restricting it

I They add extra safety

I They are high level → easier to port

Domain specific languages are good I They increase readability of your code by restricting it

I They add extra safety

I They are high level → easier to port

Domain specific languages are good

I DSLs allow you to reduce the amount of code I They add extra safety

I They are high level → easier to port

Domain specific languages are good

I DSLs allow you to reduce the amount of code

I They increase readability of your code by restricting it I They are high level → easier to port

Domain specific languages are good

I DSLs allow you to reduce the amount of code

I They increase readability of your code by restricting it

I They add extra safety Domain specific languages are good

I DSLs allow you to reduce the amount of code

I They increase readability of your code by restricting it

I They add extra safety

I They are high level → easier to port I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures

I And programming languages (bindings)

I And rendering APIs

I Sound architectures

I And others

Portability is not only platforms I But it also includes hardware architectures

I And programming languages (bindings)

I And rendering APIs

I Sound architectures

I And others

Portability is not only platforms

I Operating systems are the typical thing you imagine by portability I And programming languages (bindings)

I And rendering APIs

I Sound architectures

I And others

Portability is not only platforms

I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures I And rendering APIs

I Sound architectures

I And others

Portability is not only platforms

I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures

I And programming languages (bindings) I Sound architectures

I And others

Portability is not only platforms

I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures

I And programming languages (bindings)

I And rendering APIs I And others

Portability is not only platforms

I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures

I And programming languages (bindings)

I And rendering APIs

I Sound architectures Portability is not only platforms

I Operating systems are the typical thing you imagine by portability

I But it also includes hardware architectures

I And programming languages (bindings)

I And rendering APIs

I Sound architectures

I And others Enlightenment/EFL overview I X11/Wayland desktop shell for Linux, the BSDs and others

I Playground for the EFL

I The prettiest window manager around

I Crashy mess with portability issues

What is Enlightenment? I Playground for the EFL

I The prettiest window manager around

I Crashy mess with portability issues

What is Enlightenment?

I X11/Wayland desktop shell for Linux, the BSDs and others I The prettiest window manager around

I Crashy mess with portability issues

What is Enlightenment?

I X11/Wayland desktop shell for Linux, the BSDs and others

I Playground for the EFL I Crashy mess with portability issues

What is Enlightenment?

I X11/Wayland desktop shell for Linux, the BSDs and others

I Playground for the EFL

I The prettiest window manager around What is Enlightenment?

I X11/Wayland desktop shell for Linux, the BSDs and others

I Playground for the EFL

I The prettiest window manager around

I Crashy mess with portability issues I Enlightenment Foundation Libraries

I Masterpiece of engineering

I A suite of libraries originally created for Enlightenment

I These days it is what you mean by Enlightenment

What is EFL? I Masterpiece of engineering

I A suite of libraries originally created for Enlightenment

I These days it is what you mean by Enlightenment

What is EFL?

I Enlightenment Foundation Libraries I A suite of libraries originally created for Enlightenment

I These days it is what you mean by Enlightenment

What is EFL?

I Enlightenment Foundation Libraries

I Masterpiece of engineering I These days it is what you mean by Enlightenment

What is EFL?

I Enlightenment Foundation Libraries

I Masterpiece of engineering

I A suite of libraries originally created for Enlightenment What is EFL?

I Enlightenment Foundation Libraries

I Masterpiece of engineering

I A suite of libraries originally created for Enlightenment

I These days it is what you mean by Enlightenment I Low level libraries (such as C data structures)

I Convenience libraries (D-Bus interface library, physics engine wrapper and others)

I Graphical libraries (canvas, UI toolkit and others)

I Some non-portable wrapper mess

What does the EFL include? I Convenience libraries (D-Bus interface library, physics engine wrapper and others)

I Graphical libraries (canvas, UI toolkit and others)

I Some non-portable wrapper mess

What does the EFL include?

I Low level libraries (such as C data structures) I Graphical libraries (canvas, UI toolkit and others)

I Some non-portable wrapper mess

What does the EFL include?

I Low level libraries (such as C data structures)

I Convenience libraries (D-Bus interface library, physics engine wrapper and others) I Some non-portable wrapper mess

What does the EFL include?

I Low level libraries (such as C data structures)

I Convenience libraries (D-Bus interface library, physics engine wrapper and others)

I Graphical libraries (canvas, UI toolkit and others) What does the EFL include?

I Low level libraries (such as C data structures)

I Convenience libraries (D-Bus interface library, physics engine wrapper and others)

I Graphical libraries (canvas, UI toolkit and others)

I Some non-portable wrapper mess EFL portability problems I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X I Potential alternatives so far proved to be worse

I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives I Had to go with the lesser evil

Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse Build system

I EFL uses GNU Autotools

I Autotools is a terrible monster that eats little children

I But it works acceptably on Unix-like systems

I It’s problematic on Windows

I And kind of on OS X

I No real alternatives

I Potential alternatives so far proved to be worse

I Had to go with the lesser evil I Works on all supported platforms

I Can use on Linux for better performance

I Therefore we should also have kqueue support

I Cleanup is needed - move the epoll parts out of mainloop source

Ecore main loop I Can use epoll on Linux for better performance

I Therefore we should also have kqueue support

I Cleanup is needed - move the epoll parts out of mainloop source

Ecore main loop

I Works on all supported platforms I Therefore we should also have kqueue support

I Cleanup is needed - move the epoll parts out of mainloop source

Ecore main loop

I Works on all supported platforms

I Can use epoll on Linux for better performance I Cleanup is needed - move the epoll parts out of mainloop source

Ecore main loop

I Works on all supported platforms

I Can use epoll on Linux for better performance

I Therefore we should also have kqueue support Ecore main loop

I Works on all supported platforms

I Can use epoll on Linux for better performance

I Therefore we should also have kqueue support

I Cleanup is needed - move the epoll parts out of mainloop source I Currently only supports PulseAudio (limited support for ALSA)

I PulseAudio works on the BSDs

I Most people don’t want it

I Solution - implement OSS support

Ecore audio I PulseAudio works on the BSDs

I Most people don’t want it

I Solution - implement OSS support

Ecore audio

I Currently only supports PulseAudio (limited support for ALSA) I Most people don’t want it

I Solution - implement OSS support

Ecore audio

I Currently only supports PulseAudio (limited support for ALSA)

I PulseAudio works on the BSDs I Solution - implement OSS support

Ecore audio

I Currently only supports PulseAudio (limited support for ALSA)

I PulseAudio works on the BSDs

I Most people don’t want it Ecore audio

I Currently only supports PulseAudio (limited support for ALSA)

I PulseAudio works on the BSDs

I Most people don’t want it

I Solution - implement OSS support I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only

I *BSD support would be relevant I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root) I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait I Or use the LoginKit shim

I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2? I Depending on LoginKit feels messy

Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwise needs root)

I Solution for libinput - have to wait

I Solution for systemd-login/logind - perhaps ConsoleKit2?

I Or use the LoginKit shim

I Depending on LoginKit feels messy I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev? I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev? I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends? I Blocks on ecore drm

Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports Ecore wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yet upstream

I Other BSDs? Have everyone implement evdev?

I Or split away the evdev stuff and write OS specific backends?

I Also needs libwayland - need to wait for Wayland ports

I Blocks on ecore drm I wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount) I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount)

I Bad idea I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq? I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze I Platform specific backends in the library (udev, devd/libdevq...)

Eeze

I Udev wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead Eeze

I Udev wrapper library (+ libmount)

I Bad idea

I Temporary solution - use (and potentially extend) libdevq?

I Might not be possible

I Current plan - deprecate Eeze

I Come up with a high level library instead

I Platform specific backends in the library (udev, devd/libdevq...) Enlightenment portability problems I EFL portability problems also affect Enlightenment

I No wayland support on *BSD

I No eeze on *BSD

I And other problems

Overview I No wayland support on *BSD

I No eeze on *BSD

I And other problems

Overview

I EFL portability problems also affect Enlightenment I No eeze on *BSD

I And other problems

Overview

I EFL portability problems also affect Enlightenment

I No wayland support on *BSD I And other problems

Overview

I EFL portability problems also affect Enlightenment

I No wayland support on *BSD

I No eeze on *BSD Overview

I EFL portability problems also affect Enlightenment

I No wayland support on *BSD

I No eeze on *BSD

I And other problems I Since a while ago, Enlightenment startup executable uses ptrace

I Used to catch segfaults and display a window allowing a restart

I Replaces old unreliable way

I PT GETSIGINFO is used - Linux specific extension

I Therefore ptrace is not used on *BSD and a crash will go to tty

Ptrace I Used to catch segfaults and display a window allowing a restart

I Replaces old unreliable way

I PT GETSIGINFO is used - Linux specific extension

I Therefore ptrace is not used on *BSD and a crash will go to tty

Ptrace

I Since a while ago, Enlightenment startup executable uses ptrace I Replaces old unreliable way

I PT GETSIGINFO is used - Linux specific extension

I Therefore ptrace is not used on *BSD and a crash will go to tty

Ptrace

I Since a while ago, Enlightenment startup executable uses ptrace

I Used to catch segfaults and display a window allowing a restart I PT GETSIGINFO is used - Linux specific extension

I Therefore ptrace is not used on *BSD and a crash will go to tty

Ptrace

I Since a while ago, Enlightenment startup executable uses ptrace

I Used to catch segfaults and display a window allowing a restart

I Replaces old unreliable way I Therefore ptrace is not used on *BSD and a crash will go to tty

Ptrace

I Since a while ago, Enlightenment startup executable uses ptrace

I Used to catch segfaults and display a window allowing a restart

I Replaces old unreliable way

I PT GETSIGINFO is used - Linux specific extension Ptrace

I Since a while ago, Enlightenment startup executable uses ptrace

I Used to catch segfaults and display a window allowing a restart

I Replaces old unreliable way

I PT GETSIGINFO is used - Linux specific extension

I Therefore ptrace is not used on *BSD and a crash will go to tty I Used to manage devices in Enlightenment

I No eeze → no device management

I Also used for backlight handling

I Also used for temperature monitoring

I Solution: eeze replacement

Eeze I No eeze → no device management

I Also used for backlight handling

I Also used for temperature monitoring

I Solution: eeze replacement

Eeze

I Used to manage devices in Enlightenment I Also used for backlight handling

I Also used for temperature monitoring

I Solution: eeze replacement

Eeze

I Used to manage devices in Enlightenment

I No eeze → no device management I Also used for temperature monitoring

I Solution: eeze replacement

Eeze

I Used to manage devices in Enlightenment

I No eeze → no device management

I Also used for backlight handling I Solution: eeze replacement

Eeze

I Used to manage devices in Enlightenment

I No eeze → no device management

I Also used for backlight handling

I Also used for temperature monitoring Eeze

I Used to manage devices in Enlightenment

I No eeze → no device management

I Also used for backlight handling

I Also used for temperature monitoring

I Solution: eeze replacement I Current mixer module only supports PulseAudio and ALSA

I Also causes high CPU loads on FreeBSD with Pulse

I New mixer in development

I OSS support needed in the new mixer

Mixer I Also causes high CPU loads on FreeBSD with Pulse

I New mixer in development

I OSS support needed in the new mixer

Mixer

I Current mixer module only supports PulseAudio and ALSA I New mixer in development

I OSS support needed in the new mixer

Mixer

I Current mixer module only supports PulseAudio and ALSA

I Also causes high CPU loads on FreeBSD with Pulse I OSS support needed in the new mixer

Mixer

I Current mixer module only supports PulseAudio and ALSA

I Also causes high CPU loads on FreeBSD with Pulse

I New mixer in development Mixer

I Current mixer module only supports PulseAudio and ALSA

I Also causes high CPU loads on FreeBSD with Pulse

I New mixer in development

I OSS support needed in the new mixer Other problems I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other way around

I I’m the only bridge

I Relatively low interest (but there is some)

I Situation getting better

Distribution I Poor communication with upstream EFL and the other way around

I I’m the only bridge

I Relatively low interest (but there is some)

I Situation getting better

Distribution

I FreeBSD ports provide EFL/E → good I I’m the only bridge

I Relatively low interest (but there is some)

I Situation getting better

Distribution

I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other way around I Relatively low interest (but there is some)

I Situation getting better

Distribution

I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other way around

I I’m the only bridge I Situation getting better

Distribution

I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other way around

I I’m the only bridge

I Relatively low interest (but there is some) Distribution

I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other way around

I I’m the only bridge

I Relatively low interest (but there is some)

I Situation getting better Windows I Evil library provides part of POSIX

I Most components have Windows related code

I Native gdi/ddraw graphics backends

I Overall decent code coverage

The good I Most components have Windows related code

I Native gdi/ddraw graphics backends

I Overall decent code coverage

The good

I Evil library provides part of POSIX I Native gdi/ddraw graphics backends

I Overall decent code coverage

The good

I Evil library provides part of POSIX

I Most components have Windows related code I Overall decent code coverage

The good

I Evil library provides part of POSIX

I Most components have Windows related code

I Native gdi/ddraw graphics backends The good

I Evil library provides part of POSIX

I Most components have Windows related code

I Native gdi/ddraw graphics backends

I Overall decent code coverage I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Build system I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Build system

I Because of autotools, we can only support MinGW/MSYS environments I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Build system

I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files? I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Build system

I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files?

I Use CMake? Premake? ... I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Build system

I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features I Create build scripts to trigger from build system?

Build system

I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation Build system

I Because of autotools, we can only support MinGW/MSYS environments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotools features

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system? I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds

Availability I No official Windows builds

I win-builds.org provides unofficial builds

Availability

I The above → difficult to ship I win-builds.org provides unofficial builds

Availability

I The above → difficult to ship

I No official Windows builds Availability

I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds I Ecore audio support should be added

Other issues Other issues

I Ecore audio support should be added OS X I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

The good I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

The good

I Native Cocoa backend I Some FreeBSD APIs present (kqueue)

The good

I Native Cocoa backend

I Unix-like guts → easy to cover The good

I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue) I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files?

Build system I Standard shell tools are present

I XCode project files?

Build system

I Similar issues as on Windows to a lesser degree I XCode project files?

Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files? I No official or unofficial builds (as far as I know)

I You have to compile on your own

I Major lack of testing (no CI setup, very few developers)

Availability I You have to compile on your own

I Major lack of testing (no CI setup, very few developers)

Availability

I No official or unofficial builds (as far as I know) I Major lack of testing (no CI setup, very few developers)

Availability

I No official or unofficial builds (as far as I know)

I You have to compile on your own Availability

I No official or unofficial builds (as far as I know)

I You have to compile on your own

I Major lack of testing (no CI setup, very few developers) I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful

I Same goes for Mac

I Improvements are coming :)

Final summary I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful

I Same goes for Mac

I Improvements are coming :)

Final summary

I Linux infra changes made an already difficult thing even more difficult I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful

I Same goes for Mac

I Improvements are coming :)

Final summary

I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed I Windows support is a little painful

I Same goes for Mac

I Improvements are coming :)

Final summary

I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have I Same goes for Mac

I Improvements are coming :)

Final summary

I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful I Improvements are coming :)

Final summary

I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful

I Same goes for Mac Final summary

I Linux infra changes made an already difficult thing even more difficult

I Code modularization and abstraction is needed

I Build system might not be ideal, but it’s the best we have

I Windows support is a little painful

I Same goes for Mac

I Improvements are coming :) Thank you.

Daniel Kolesa Samsung Open Source Group [email protected] @octaforge FOSDEM 2015