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 Linux kernel
I Systemd
I High level components depending on low level stuff (libudev)
Overview 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 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 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 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 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 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