Enlightenment: A Cross Platform Window Manager & Toolkit
-
Upload
samsung-open-source-group -
Category
Technology
-
view
191 -
download
0
Transcript of Enlightenment: A Cross Platform Window Manager & Toolkit
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
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)
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
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
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...)
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
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
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
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 :)