enlightenment: a cross platform window manager & toolkit

201
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

Upload: samsung-open-source-group

Post on 16-Jul-2015

188 views

Category:

Technology


0 download

TRANSCRIPT

Enlightenment: A Cross PlatformWindow Manager and Toolkit

Dealing with Enlightenment portability issues in FreeBSD and elsewhere

Daniel KolesaSamsung Open Source Group

[email protected]@octaforge

FOSDEM 2015

State of the ecosystemWhere are we now?

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

The right approach

I Write general code

I If you need any specific functionality, design a high level APIfor 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 If you need any specific functionality, design a high level APIfor 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 If you need any specific functionality, design a high level APIfor 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 If you need any specific functionality, design a high level APIfor 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 If you need any specific functionality, design a high level APIfor 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 If you need any specific functionality, design a high level APIfor 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

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?

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?

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?

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?

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?

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?

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 10places

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 10places

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 10places

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 10places

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 10places

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Portability is not only platforms

I Operating systems are the typical thing you imagine byportability

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 byportability

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 byportability

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 byportability

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 byportability

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 byportability

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 byportability

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

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

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

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

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

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

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

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

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

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

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

What does the EFL include?

I Low level libraries (such as C data structures)

I Convenience libraries (D-Bus interface library, physics enginewrapper 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 Convenience libraries (D-Bus interface library, physics enginewrapper 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 Convenience libraries (D-Bus interface library, physics enginewrapper 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 Convenience libraries (D-Bus interface library, physics enginewrapper 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 Convenience libraries (D-Bus interface library, physics enginewrapper and others)

I Graphical libraries (canvas, UI toolkit and others)

I Some non-portable wrapper mess

EFL portability problems

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

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

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

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

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

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

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

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

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

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 mainloopsource

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 mainloopsource

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 mainloopsource

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 mainloopsource

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 mainloopsource

Ecore audio

I Currently only supports PulseAudio (limited support forALSA)

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 forALSA)

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 forALSA)

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 forALSA)

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 forALSA)

I PulseAudio works on the BSDs

I Most people don’t want it

I Solution - implement OSS support

Ecore drm

I Currently Linux only

I *BSD support would be relevant

I Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 Uses libinput and optionally systemd-login/logind (otherwiseneeds 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 wayland

I Also Linux only right now

I Uses evdev

I Solution for evdev?

I GSoC 2014 implements evdev in FreeBSD, but not yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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 yetupstream

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

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...)

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...)

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...)

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...)

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...)

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...)

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...)

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

Overview

I EFL portability problems also affect Enlightenment

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 wayland support on *BSD

I No eeze 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

I And other problems

Overview

I EFL portability problems also affect Enlightenment

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 wayland support on *BSD

I No eeze on *BSD

I And other problems

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

Ptrace

I Since a while ago, Enlightenment startup executable usesptrace

I Used to catch segfaults and display a window allowing arestart

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 totty

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

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

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

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

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

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

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

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

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

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

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

Distribution

I FreeBSD ports provide EFL/E → good

I Poor communication with upstream EFL and the other wayaround

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 wayaround

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 wayaround

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 wayaround

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 wayaround

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 wayaround

I I’m the only bridge

I Relatively low interest (but there is some)

I Situation getting better

Windows

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

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

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

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

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

Build system

I Because of autotools, we can only support MinGW/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

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/MSYSenvironments

I Create Visual Studio project files?

I Use CMake? Premake? ...

I Neither of these solutions provide some of our used Autotoolsfeatures

I No distcheck, no easy file pre-generation

I Create build scripts to trigger from build system?

Availability

I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds

Availability

I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds

Availability

I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds

Availability

I The above → difficult to ship

I No official Windows builds

I win-builds.org provides unofficial builds

Other issues

I Ecore audio support should be added

Other issues

I Ecore audio support should be added

OS X

The good

I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

The good

I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

The good

I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

The good

I Native Cocoa backend

I Unix-like guts → easy to cover

I Some FreeBSD APIs present (kqueue)

Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files?

Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files?

Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files?

Build system

I Similar issues as on Windows to a lesser degree

I Standard shell tools are present

I XCode project files?

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)

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)

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)

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)

Final summary

I Linux infra changes made an already difficult thing even moredifficult

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 moredifficult

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 moredifficult

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 moredifficult

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 moredifficult

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 moredifficult

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 moredifficult

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 KolesaSamsung Open Source Group

[email protected]@octaforge

FOSDEM 2015