SlideShare ist ein Scribd-Unternehmen logo
1 von 201
Downloaden Sie, um offline zu lesen
Enlightenment: A Cross Platform
Window Manager and Toolkit
Dealing with Enlightenment portability issues in FreeBSD and elsewhere
Daniel Kolesa
Samsung Open Source Group
d.kolesa@samsung.com
@octaforge
FOSDEM 2015
State of the ecosystem
Where are we now?
Overview
Overview
During the last few years - drastic change of ecosystem
Overview
During the last few years - drastic change of ecosystem
Graphics stack in Linux kernel
Overview
During the last few years - drastic change of ecosystem
Graphics stack in Linux kernel
Systemd
Overview
During the last few years - drastic change of ecosystem
Graphics stack in Linux kernel
Systemd
High level components depending on low level stuff (libudev)
BSDs in the ecosystem
BSDs in the ecosystem
Lagging behind
BSDs in the ecosystem
Lagging behind
Losing compatibility with Linux stuff
BSDs in the ecosystem
Lagging behind
Losing compatibility with Linux stuff
Custom solutions needed
BSDs in the ecosystem
Lagging behind
Losing compatibility with Linux stuff
Custom solutions needed
(or wrapper shims)
BSDs in the ecosystem
Lagging behind
Losing compatibility with Linux stuff
Custom solutions needed
(or wrapper shims)
(trying to avoid that)
General portability tips
Overview
Overview
We have a very diverse ecosystem
Overview
We have a very diverse ecosystem
This includes a wide range of operating systems
Overview
We have a very diverse ecosystem
This includes a wide range of operating systems
Not all operating system have the same features
Overview
We have a very diverse ecosystem
This includes a wide range of operating systems
Not all operating system have the same features
Writing portable software is painful, but very much worth it
Overview
We have a very diverse ecosystem
This includes a wide range of operating systems
Not all operating system have the same features
Writing portable software is painful, but very much worth it
And the end result comes out cleaner
Don’t write against a platform
Don’t write against a platform
A big mistake we’ve done in the EFL
Don’t write against a platform
A big mistake we’ve done in the EFL
We wrote code against Linux
Don’t write against a platform
A big mistake we’ve done in the EFL
We wrote code against Linux
Every other platform is expected to implement the same APIs
Don’t write against a platform
A big mistake we’ve done in the EFL
We wrote code against Linux
Every other platform is expected to implement the same APIs
Wrappers then implement API shims
Why is this wrong?
Why is this wrong?
System specific APIs are often unnecessarily low level
Why is this wrong?
System specific APIs are often unnecessarily low level
Low level → difficult to write
Why is this wrong?
System specific APIs are often unnecessarily low level
Low level → difficult to write
Low level → difficult to maintain
Why is this wrong?
System specific APIs are often unnecessarily low level
Low level → difficult to write
Low level → difficult to maintain
And a pain to port
Why is this wrong?
System specific APIs are often unnecessarily low level
Low level → difficult to write
Low level → difficult to maintain
And a pain to port
Also, every time you do it, a kitten dies
Why is this wrong?
System specific APIs are often unnecessarily low level
Low level → difficult to write
Low level → difficult to maintain
And a pain to port
Also, every time you do it, a kitten dies
Too late to save them now
The right approach
The right approach
Write general code
The right approach
Write general code
If you need any specific functionality, design a high level API
for it
The right approach
Write general code
If you need any specific functionality, design a high level API
for it
Use this API from your code
The right approach
Write general code
If you need any specific functionality, design a high level API
for it
Use this API from your code
Write OS specific backends implementing this API
The right approach
Write general code
If you need any specific functionality, design a high level API
for it
Use this API from your code
Write OS specific backends implementing this API
Abstracted, high level, easy to write, easy to maintain
KISS principle
KISS principle
Plays an important role
KISS principle
Plays an important role
Keep your API simple and as general purpose as possible
KISS principle
Plays an important role
Keep your API simple and as general purpose as possible
Don’t implement very specific features
KISS principle
Plays an important role
Keep your API simple and as general purpose as possible
Don’t implement very specific features
Instead always ask yourself a question:
KISS principle
Plays an important role
Keep your API simple and as general purpose as possible
Don’t implement very specific features
Instead always ask yourself a question:
Can I generalize this? Can this be reused?
Don’t repeat yourself!
Don’t repeat yourself!
Write reusable code
Don’t repeat yourself!
Write reusable code
And actually reuse it
Don’t repeat yourself!
Write reusable code
And actually reuse it
The worst thing you can do is copy paste a snippet in 10
places
Don’t repeat yourself!
Write reusable code
And actually reuse it
The worst thing you can do is copy paste a snippet in 10
places
Any update will force you to update it in all 10 places
No internal dependencies
No internal dependencies
Internal dependencies are bad
No internal dependencies
Internal dependencies are bad
They force you to maintain them
No internal dependencies
Internal dependencies are bad
They force you to maintain them
They are not reusable even though they could be
No internal dependencies
Internal dependencies are bad
They force you to maintain them
They are not reusable even though they could be
They hinder portability
Do not lock youself to a toolchain
Do not lock youself to a toolchain
Abusing compiler extensions might be tempting
Do not lock youself to a toolchain
Abusing compiler extensions might be tempting
End result is often maintenance hell
Do not lock youself to a toolchain
Abusing compiler extensions might be tempting
End result is often maintenance hell
Porting such code to a new toolchain sucks
Domain specific languages are good
Domain specific languages are good
DSLs allow you to reduce the amount of code
Domain specific languages are good
DSLs allow you to reduce the amount of code
They increase readability of your code by restricting it
Domain specific languages are good
DSLs allow you to reduce the amount of code
They increase readability of your code by restricting it
They add extra safety
Domain specific languages are good
DSLs allow you to reduce the amount of code
They increase readability of your code by restricting it
They add extra safety
They are high level → easier to port
Portability is not only platforms
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
But it also includes hardware architectures
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
But it also includes hardware architectures
And programming languages (bindings)
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
But it also includes hardware architectures
And programming languages (bindings)
And rendering APIs
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
But it also includes hardware architectures
And programming languages (bindings)
And rendering APIs
Sound architectures
Portability is not only platforms
Operating systems are the typical thing you imagine by
portability
But it also includes hardware architectures
And programming languages (bindings)
And rendering APIs
Sound architectures
And others
Enlightenment/EFL overview
What is Enlightenment?
What is Enlightenment?
X11/Wayland desktop shell for Linux, the BSDs and others
What is Enlightenment?
X11/Wayland desktop shell for Linux, the BSDs and others
Playground for the EFL
What is Enlightenment?
X11/Wayland desktop shell for Linux, the BSDs and others
Playground for the EFL
The prettiest window manager around
What is Enlightenment?
X11/Wayland desktop shell for Linux, the BSDs and others
Playground for the EFL
The prettiest window manager around
Crashy mess with portability issues
What is EFL?
What is EFL?
Enlightenment Foundation Libraries
What is EFL?
Enlightenment Foundation Libraries
Masterpiece of engineering
What is EFL?
Enlightenment Foundation Libraries
Masterpiece of engineering
A suite of libraries originally created for Enlightenment
What is EFL?
Enlightenment Foundation Libraries
Masterpiece of engineering
A suite of libraries originally created for Enlightenment
These days it is what you mean by Enlightenment
What does the EFL include?
What does the EFL include?
Low level libraries (such as C data structures)
What does the EFL include?
Low level libraries (such as C data structures)
Convenience libraries (D-Bus interface library, physics engine
wrapper and others)
What does the EFL include?
Low level libraries (such as C data structures)
Convenience libraries (D-Bus interface library, physics engine
wrapper and others)
Graphical libraries (canvas, UI toolkit and others)
What does the EFL include?
Low level libraries (such as C data structures)
Convenience libraries (D-Bus interface library, physics engine
wrapper and others)
Graphical libraries (canvas, UI toolkit and others)
Some non-portable wrapper mess
EFL portability problems
Build system
Build system
EFL uses GNU Autotools
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
It’s problematic on Windows
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
It’s problematic on Windows
And kind of on OS X
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
It’s problematic on Windows
And kind of on OS X
No real alternatives
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
It’s problematic on Windows
And kind of on OS X
No real alternatives
Potential alternatives so far proved to be worse
Build system
EFL uses GNU Autotools
Autotools is a terrible monster that eats little children
But it works acceptably on Unix-like systems
It’s problematic on Windows
And kind of on OS X
No real alternatives
Potential alternatives so far proved to be worse
Had to go with the lesser evil
Ecore main loop
Ecore main loop
Works on all supported platforms
Ecore main loop
Works on all supported platforms
Can use epoll on Linux for better performance
Ecore main loop
Works on all supported platforms
Can use epoll on Linux for better performance
Therefore we should also have kqueue support
Ecore main loop
Works on all supported platforms
Can use epoll on Linux for better performance
Therefore we should also have kqueue support
Cleanup is needed - move the epoll parts out of mainloop
source
Ecore audio
Ecore audio
Currently only supports PulseAudio (limited support for
ALSA)
Ecore audio
Currently only supports PulseAudio (limited support for
ALSA)
PulseAudio works on the BSDs
Ecore audio
Currently only supports PulseAudio (limited support for
ALSA)
PulseAudio works on the BSDs
Most people don’t want it
Ecore audio
Currently only supports PulseAudio (limited support for
ALSA)
PulseAudio works on the BSDs
Most people don’t want it
Solution - implement OSS support
Ecore drm
Ecore drm
Currently Linux only
Ecore drm
Currently Linux only
*BSD support would be relevant
Ecore drm
Currently Linux only
*BSD support would be relevant
Uses libinput and optionally systemd-login/logind (otherwise
needs root)
Ecore drm
Currently Linux only
*BSD support would be relevant
Uses libinput and optionally systemd-login/logind (otherwise
needs root)
Solution for libinput - have to wait
Ecore drm
Currently Linux only
*BSD support would be relevant
Uses libinput and optionally systemd-login/logind (otherwise
needs root)
Solution for libinput - have to wait
Solution for systemd-login/logind - perhaps ConsoleKit2?
Ecore drm
Currently Linux only
*BSD support would be relevant
Uses libinput and optionally systemd-login/logind (otherwise
needs root)
Solution for libinput - have to wait
Solution for systemd-login/logind - perhaps ConsoleKit2?
Or use the LoginKit shim
Ecore drm
Currently Linux only
*BSD support would be relevant
Uses libinput and optionally systemd-login/logind (otherwise
needs root)
Solution for libinput - have to wait
Solution for systemd-login/logind - perhaps ConsoleKit2?
Or use the LoginKit shim
Depending on LoginKit feels messy
Ecore wayland
Ecore wayland
Also Linux only right now
Ecore wayland
Also Linux only right now
Uses evdev
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
GSoC 2014 implements evdev in FreeBSD, but not yet
upstream
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
GSoC 2014 implements evdev in FreeBSD, but not yet
upstream
Other BSDs? Have everyone implement evdev?
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
GSoC 2014 implements evdev in FreeBSD, but not yet
upstream
Other BSDs? Have everyone implement evdev?
Or split away the evdev stuff and write OS specific backends?
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
GSoC 2014 implements evdev in FreeBSD, but not yet
upstream
Other BSDs? Have everyone implement evdev?
Or split away the evdev stuff and write OS specific backends?
Also needs libwayland - need to wait for Wayland ports
Ecore wayland
Also Linux only right now
Uses evdev
Solution for evdev?
GSoC 2014 implements evdev in FreeBSD, but not yet
upstream
Other BSDs? Have everyone implement evdev?
Or split away the evdev stuff and write OS specific backends?
Also needs libwayland - need to wait for Wayland ports
Blocks on ecore drm
Eeze
Eeze
Udev wrapper library (+ libmount)
Eeze
Udev wrapper library (+ libmount)
Bad idea
Eeze
Udev wrapper library (+ libmount)
Bad idea
Temporary solution - use (and potentially extend) libdevq?
Eeze
Udev wrapper library (+ libmount)
Bad idea
Temporary solution - use (and potentially extend) libdevq?
Might not be possible
Eeze
Udev wrapper library (+ libmount)
Bad idea
Temporary solution - use (and potentially extend) libdevq?
Might not be possible
Current plan - deprecate Eeze
Eeze
Udev wrapper library (+ libmount)
Bad idea
Temporary solution - use (and potentially extend) libdevq?
Might not be possible
Current plan - deprecate Eeze
Come up with a high level library instead
Eeze
Udev wrapper library (+ libmount)
Bad idea
Temporary solution - use (and potentially extend) libdevq?
Might not be possible
Current plan - deprecate Eeze
Come up with a high level library instead
Platform specific backends in the library (udev,
devd/libdevq...)
Enlightenment portability problems
Overview
Overview
EFL portability problems also affect Enlightenment
Overview
EFL portability problems also affect Enlightenment
No wayland support on *BSD
Overview
EFL portability problems also affect Enlightenment
No wayland support on *BSD
No eeze on *BSD
Overview
EFL portability problems also affect Enlightenment
No wayland support on *BSD
No eeze on *BSD
And other problems
Ptrace
Ptrace
Since a while ago, Enlightenment startup executable uses
ptrace
Ptrace
Since a while ago, Enlightenment startup executable uses
ptrace
Used to catch segfaults and display a window allowing a
restart
Ptrace
Since a while ago, Enlightenment startup executable uses
ptrace
Used to catch segfaults and display a window allowing a
restart
Replaces old unreliable way
Ptrace
Since a while ago, Enlightenment startup executable uses
ptrace
Used to catch segfaults and display a window allowing a
restart
Replaces old unreliable way
PT GETSIGINFO is used - Linux specific extension
Ptrace
Since a while ago, Enlightenment startup executable uses
ptrace
Used to catch segfaults and display a window allowing a
restart
Replaces old unreliable way
PT GETSIGINFO is used - Linux specific extension
Therefore ptrace is not used on *BSD and a crash will go to
tty
Eeze
Eeze
Used to manage devices in Enlightenment
Eeze
Used to manage devices in Enlightenment
No eeze → no device management
Eeze
Used to manage devices in Enlightenment
No eeze → no device management
Also used for backlight handling
Eeze
Used to manage devices in Enlightenment
No eeze → no device management
Also used for backlight handling
Also used for temperature monitoring
Eeze
Used to manage devices in Enlightenment
No eeze → no device management
Also used for backlight handling
Also used for temperature monitoring
Solution: eeze replacement
Mixer
Mixer
Current mixer module only supports PulseAudio and ALSA
Mixer
Current mixer module only supports PulseAudio and ALSA
Also causes high CPU loads on FreeBSD with Pulse
Mixer
Current mixer module only supports PulseAudio and ALSA
Also causes high CPU loads on FreeBSD with Pulse
New mixer in development
Mixer
Current mixer module only supports PulseAudio and ALSA
Also causes high CPU loads on FreeBSD with Pulse
New mixer in development
OSS support needed in the new mixer
Other problems
Distribution
Distribution
FreeBSD ports provide EFL/E → good
Distribution
FreeBSD ports provide EFL/E → good
Poor communication with upstream EFL and the other way
around
Distribution
FreeBSD ports provide EFL/E → good
Poor communication with upstream EFL and the other way
around
I’m the only bridge
Distribution
FreeBSD ports provide EFL/E → good
Poor communication with upstream EFL and the other way
around
I’m the only bridge
Relatively low interest (but there is some)
Distribution
FreeBSD ports provide EFL/E → good
Poor communication with upstream EFL and the other way
around
I’m the only bridge
Relatively low interest (but there is some)
Situation getting better
Windows
The good
The good
Evil library provides part of POSIX
The good
Evil library provides part of POSIX
Most components have Windows related code
The good
Evil library provides part of POSIX
Most components have Windows related code
Native gdi/ddraw graphics backends
The good
Evil library provides part of POSIX
Most components have Windows related code
Native gdi/ddraw graphics backends
Overall decent code coverage
Build system
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Create Visual Studio project files?
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Create Visual Studio project files?
Use CMake? Premake? ...
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Create Visual Studio project files?
Use CMake? Premake? ...
Neither of these solutions provide some of our used Autotools
features
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Create Visual Studio project files?
Use CMake? Premake? ...
Neither of these solutions provide some of our used Autotools
features
No distcheck, no easy file pre-generation
Build system
Because of autotools, we can only support MinGW/MSYS
environments
Create Visual Studio project files?
Use CMake? Premake? ...
Neither of these solutions provide some of our used Autotools
features
No distcheck, no easy file pre-generation
Create build scripts to trigger from build system?
Availability
Availability
The above → difficult to ship
Availability
The above → difficult to ship
No official Windows builds
Availability
The above → difficult to ship
No official Windows builds
win-builds.org provides unofficial builds
Other issues
Other issues
Ecore audio support should be added
OS X
The good
The good
Native Cocoa backend
The good
Native Cocoa backend
Unix-like guts → easy to cover
The good
Native Cocoa backend
Unix-like guts → easy to cover
Some FreeBSD APIs present (kqueue)
Build system
Build system
Similar issues as on Windows to a lesser degree
Build system
Similar issues as on Windows to a lesser degree
Standard shell tools are present
Build system
Similar issues as on Windows to a lesser degree
Standard shell tools are present
XCode project files?
Availability
Availability
No official or unofficial builds (as far as I know)
Availability
No official or unofficial builds (as far as I know)
You have to compile on your own
Availability
No official or unofficial builds (as far as I know)
You have to compile on your own
Major lack of testing (no CI setup, very few developers)
Final summary
Final summary
Linux infra changes made an already difficult thing even more
difficult
Final summary
Linux infra changes made an already difficult thing even more
difficult
Code modularization and abstraction is needed
Final summary
Linux infra changes made an already difficult thing even more
difficult
Code modularization and abstraction is needed
Build system might not be ideal, but it’s the best we have
Final summary
Linux infra changes made an already difficult thing even more
difficult
Code modularization and abstraction is needed
Build system might not be ideal, but it’s the best we have
Windows support is a little painful
Final summary
Linux infra changes made an already difficult thing even more
difficult
Code modularization and abstraction is needed
Build system might not be ideal, but it’s the best we have
Windows support is a little painful
Same goes for Mac
Final summary
Linux infra changes made an already difficult thing even more
difficult
Code modularization and abstraction is needed
Build system might not be ideal, but it’s the best we have
Windows support is a little painful
Same goes for Mac
Improvements are coming :)
Thank you.
Daniel Kolesa
Samsung Open Source Group
d.kolesa@samsung.com
@octaforge
FOSDEM 2015

Weitere ähnliche Inhalte

Was ist angesagt? (6)

iPlayground: CarPlay and MFI Hearing Aids
iPlayground: CarPlay and MFI Hearing AidsiPlayground: CarPlay and MFI Hearing Aids
iPlayground: CarPlay and MFI Hearing Aids
 
Shell scripting with f
Shell scripting with fShell scripting with f
Shell scripting with f
 
Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)
 
Pragmatic Smalltalk
Pragmatic SmalltalkPragmatic Smalltalk
Pragmatic Smalltalk
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
 
DDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves ElixirDDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves Elixir
 

Ähnlich wie Enlightenment: A Cross Platform Window Manager & Toolkit

Development workflow
Development workflowDevelopment workflow
Development workflow
Sigsiu.NET
 
Apcug 8 04_2012_v3
Apcug 8 04_2012_v3Apcug 8 04_2012_v3
Apcug 8 04_2012_v3
Orv Beach
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
jistr
 
Curso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - StackCurso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - Stack
Jackson F. de A. Mafra
 

Ähnlich wie Enlightenment: A Cross Platform Window Manager & Toolkit (20)

Development workflow
Development workflowDevelopment workflow
Development workflow
 
The REAL Angular Keynote
The REAL Angular KeynoteThe REAL Angular Keynote
The REAL Angular Keynote
 
High Level Application Scripting With EFL and LuaJIT
High Level Application Scripting With EFL and LuaJITHigh Level Application Scripting With EFL and LuaJIT
High Level Application Scripting With EFL and LuaJIT
 
Dedicated embedded linux af Esben Haabendal, Prevas A/S
Dedicated embedded linux af Esben Haabendal, Prevas A/SDedicated embedded linux af Esben Haabendal, Prevas A/S
Dedicated embedded linux af Esben Haabendal, Prevas A/S
 
Configuration as Code in Bamboo
Configuration as Code in BambooConfiguration as Code in Bamboo
Configuration as Code in Bamboo
 
Python overview
Python overviewPython overview
Python overview
 
Dev Environments: The Next Generation
Dev Environments: The Next GenerationDev Environments: The Next Generation
Dev Environments: The Next Generation
 
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action
 
Apcug 8 04_2012_v3
Apcug 8 04_2012_v3Apcug 8 04_2012_v3
Apcug 8 04_2012_v3
 
Envisioning the Future of Language Workbenches
Envisioning the Future of Language WorkbenchesEnvisioning the Future of Language Workbenches
Envisioning the Future of Language Workbenches
 
Immutable Infrastructure: the new App Deployment
Immutable Infrastructure: the new App DeploymentImmutable Infrastructure: the new App Deployment
Immutable Infrastructure: the new App Deployment
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
 
[E-Dev-Day-US-2015][9/9] High Level Application Development with Elua (Daniel...
[E-Dev-Day-US-2015][9/9] High Level Application Development with Elua (Daniel...[E-Dev-Day-US-2015][9/9] High Level Application Development with Elua (Daniel...
[E-Dev-Day-US-2015][9/9] High Level Application Development with Elua (Daniel...
 
Preparing an Open Source Documentation Repository for Translations
Preparing an Open Source Documentation Repository for TranslationsPreparing an Open Source Documentation Repository for Translations
Preparing an Open Source Documentation Repository for Translations
 
Jfokus 2015 - Immutable Server generation: the new App Deployment
Jfokus 2015 - Immutable Server generation: the new App DeploymentJfokus 2015 - Immutable Server generation: the new App Deployment
Jfokus 2015 - Immutable Server generation: the new App Deployment
 
Phoenix for Rubyists
Phoenix for RubyistsPhoenix for Rubyists
Phoenix for Rubyists
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
 
Curso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - StackCurso de Desenvolvimento Mobile - Android - Stack
Curso de Desenvolvimento Mobile - Android - Stack
 

Mehr von Samsung Open Source Group

Mehr von Samsung Open Source Group (20)

The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)The Complex IoT Equation (and FLOSS solutions)
The Complex IoT Equation (and FLOSS solutions)
 
Easy IoT with JavaScript
Easy IoT with JavaScriptEasy IoT with JavaScript
Easy IoT with JavaScript
 
Spawny: A New Approach to Logins
Spawny: A New Approach to LoginsSpawny: A New Approach to Logins
Spawny: A New Approach to Logins
 
Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
 
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT DevicesTizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
Tizen RT: A Lightweight RTOS Platform for Low-End IoT Devices
 
IoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and BeyondIoTivity: Smart Home to Automotive and Beyond
IoTivity: Smart Home to Automotive and Beyond
 
IoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorialIoTivity for Automotive: meta-ocf-automotive tutorial
IoTivity for Automotive: meta-ocf-automotive tutorial
 
GENIVI + OCF Cooperation
GENIVI + OCF CooperationGENIVI + OCF Cooperation
GENIVI + OCF Cooperation
 
Framework for IoT Interoperability
Framework for IoT InteroperabilityFramework for IoT Interoperability
Framework for IoT Interoperability
 
Open Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate StrategyOpen Source Metrics to Inform Corporate Strategy
Open Source Metrics to Inform Corporate Strategy
 
IoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT InteroperabilityIoTivity for Automotive IoT Interoperability
IoTivity for Automotive IoT Interoperability
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Thin...
 
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux DeviceAdding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
Adding IEEE 802.15.4 and 6LoWPAN to an Embedded Linux Device
 
IoTivity: From Devices to the Cloud
IoTivity: From Devices to the CloudIoTivity: From Devices to the Cloud
IoTivity: From Devices to the Cloud
 
SOSCON 2016 JerryScript
SOSCON 2016 JerryScriptSOSCON 2016 JerryScript
SOSCON 2016 JerryScript
 
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivityIoT: From Arduino Microcontrollers to Tizen Products using IoTivity
IoT: From Arduino Microcontrollers to Tizen Products using IoTivity
 
Run Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT NetworkRun Your Own 6LoWPAN Based IoT Network
Run Your Own 6LoWPAN Based IoT Network
 
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under LinuxPractical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
Practical Guide to Run an IEEE 802.15.4 Network with 6LoWPAN Under Linux
 
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/LinuxIoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
IoTivity Tutorial: Prototyping IoT Devices on GNU/Linux
 
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of ThingsJerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
JerryScript: An ultra-lighteweight JavaScript Engine for the Internet of Things
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Enlightenment: A Cross Platform Window Manager & Toolkit

  • 1. Enlightenment: A Cross Platform Window Manager and Toolkit Dealing with Enlightenment portability issues in FreeBSD and elsewhere Daniel Kolesa Samsung Open Source Group d.kolesa@samsung.com @octaforge FOSDEM 2015
  • 2. State of the ecosystem Where are we now?
  • 4. Overview During the last few years - drastic change of ecosystem
  • 5. Overview During the last few years - drastic change of ecosystem Graphics stack in Linux kernel
  • 6. Overview During the last few years - drastic change of ecosystem Graphics stack in Linux kernel Systemd
  • 7. Overview During the last few years - drastic change of ecosystem Graphics stack in Linux kernel Systemd High level components depending on low level stuff (libudev)
  • 8. BSDs in the ecosystem
  • 9. BSDs in the ecosystem Lagging behind
  • 10. BSDs in the ecosystem Lagging behind Losing compatibility with Linux stuff
  • 11. BSDs in the ecosystem Lagging behind Losing compatibility with Linux stuff Custom solutions needed
  • 12. BSDs in the ecosystem Lagging behind Losing compatibility with Linux stuff Custom solutions needed (or wrapper shims)
  • 13. BSDs in the ecosystem Lagging behind Losing compatibility with Linux stuff Custom solutions needed (or wrapper shims) (trying to avoid that)
  • 16. Overview We have a very diverse ecosystem
  • 17. Overview We have a very diverse ecosystem This includes a wide range of operating systems
  • 18. Overview We have a very diverse ecosystem This includes a wide range of operating systems Not all operating system have the same features
  • 19. Overview We have a very diverse ecosystem This includes a wide range of operating systems Not all operating system have the same features Writing portable software is painful, but very much worth it
  • 20. Overview We have a very diverse ecosystem This includes a wide range of operating systems Not all operating system have the same features Writing portable software is painful, but very much worth it And the end result comes out cleaner
  • 21. Don’t write against a platform
  • 22. Don’t write against a platform A big mistake we’ve done in the EFL
  • 23. Don’t write against a platform A big mistake we’ve done in the EFL We wrote code against Linux
  • 24. Don’t write against a platform A big mistake we’ve done in the EFL We wrote code against Linux Every other platform is expected to implement the same APIs
  • 25. Don’t write against a platform A big mistake we’ve done in the EFL We wrote code against Linux Every other platform is expected to implement the same APIs Wrappers then implement API shims
  • 26. Why is this wrong?
  • 27. Why is this wrong? System specific APIs are often unnecessarily low level
  • 28. Why is this wrong? System specific APIs are often unnecessarily low level Low level → difficult to write
  • 29. Why is this wrong? System specific APIs are often unnecessarily low level Low level → difficult to write Low level → difficult to maintain
  • 30. Why is this wrong? System specific APIs are often unnecessarily low level Low level → difficult to write Low level → difficult to maintain And a pain to port
  • 31. Why is this wrong? System specific APIs are often unnecessarily low level Low level → difficult to write Low level → difficult to maintain And a pain to port Also, every time you do it, a kitten dies
  • 32. Why is this wrong? System specific APIs are often unnecessarily low level Low level → difficult to write Low level → difficult to maintain And a pain to port Also, every time you do it, a kitten dies Too late to save them now
  • 34. The right approach Write general code
  • 35. The right approach Write general code If you need any specific functionality, design a high level API for it
  • 36. The right approach Write general code If you need any specific functionality, design a high level API for it Use this API from your code
  • 37. The right approach Write general code If you need any specific functionality, design a high level API for it Use this API from your code Write OS specific backends implementing this API
  • 38. The right approach Write general code If you need any specific functionality, design a high level API for it Use this API from your code Write OS specific backends implementing this API Abstracted, high level, easy to write, easy to maintain
  • 40. KISS principle Plays an important role
  • 41. KISS principle Plays an important role Keep your API simple and as general purpose as possible
  • 42. KISS principle Plays an important role Keep your API simple and as general purpose as possible Don’t implement very specific features
  • 43. KISS principle Plays an important role Keep your API simple and as general purpose as possible Don’t implement very specific features Instead always ask yourself a question:
  • 44. KISS principle Plays an important role Keep your API simple and as general purpose as possible Don’t implement very specific features Instead always ask yourself a question: Can I generalize this? Can this be reused?
  • 47. Don’t repeat yourself! Write reusable code And actually reuse it
  • 48. Don’t repeat yourself! Write reusable code And actually reuse it The worst thing you can do is copy paste a snippet in 10 places
  • 49. Don’t repeat yourself! Write reusable code And actually reuse it The worst thing you can do is copy paste a snippet in 10 places Any update will force you to update it in all 10 places
  • 51. No internal dependencies Internal dependencies are bad
  • 52. No internal dependencies Internal dependencies are bad They force you to maintain them
  • 53. No internal dependencies Internal dependencies are bad They force you to maintain them They are not reusable even though they could be
  • 54. No internal dependencies Internal dependencies are bad They force you to maintain them They are not reusable even though they could be They hinder portability
  • 55. Do not lock youself to a toolchain
  • 56. Do not lock youself to a toolchain Abusing compiler extensions might be tempting
  • 57. Do not lock youself to a toolchain Abusing compiler extensions might be tempting End result is often maintenance hell
  • 58. Do not lock youself to a toolchain Abusing compiler extensions might be tempting End result is often maintenance hell Porting such code to a new toolchain sucks
  • 60. Domain specific languages are good DSLs allow you to reduce the amount of code
  • 61. Domain specific languages are good DSLs allow you to reduce the amount of code They increase readability of your code by restricting it
  • 62. Domain specific languages are good DSLs allow you to reduce the amount of code They increase readability of your code by restricting it They add extra safety
  • 63. Domain specific languages are good DSLs allow you to reduce the amount of code They increase readability of your code by restricting it They add extra safety They are high level → easier to port
  • 64. Portability is not only platforms
  • 65. Portability is not only platforms Operating systems are the typical thing you imagine by portability
  • 66. Portability is not only platforms Operating systems are the typical thing you imagine by portability But it also includes hardware architectures
  • 67. Portability is not only platforms Operating systems are the typical thing you imagine by portability But it also includes hardware architectures And programming languages (bindings)
  • 68. Portability is not only platforms Operating systems are the typical thing you imagine by portability But it also includes hardware architectures And programming languages (bindings) And rendering APIs
  • 69. Portability is not only platforms Operating systems are the typical thing you imagine by portability But it also includes hardware architectures And programming languages (bindings) And rendering APIs Sound architectures
  • 70. Portability is not only platforms Operating systems are the typical thing you imagine by portability But it also includes hardware architectures And programming languages (bindings) And rendering APIs Sound architectures And others
  • 73. What is Enlightenment? X11/Wayland desktop shell for Linux, the BSDs and others
  • 74. What is Enlightenment? X11/Wayland desktop shell for Linux, the BSDs and others Playground for the EFL
  • 75. What is Enlightenment? X11/Wayland desktop shell for Linux, the BSDs and others Playground for the EFL The prettiest window manager around
  • 76. What is Enlightenment? X11/Wayland desktop shell for Linux, the BSDs and others Playground for the EFL The prettiest window manager around Crashy mess with portability issues
  • 78. What is EFL? Enlightenment Foundation Libraries
  • 79. What is EFL? Enlightenment Foundation Libraries Masterpiece of engineering
  • 80. What is EFL? Enlightenment Foundation Libraries Masterpiece of engineering A suite of libraries originally created for Enlightenment
  • 81. What is EFL? Enlightenment Foundation Libraries Masterpiece of engineering A suite of libraries originally created for Enlightenment These days it is what you mean by Enlightenment
  • 82. What does the EFL include?
  • 83. What does the EFL include? Low level libraries (such as C data structures)
  • 84. What does the EFL include? Low level libraries (such as C data structures) Convenience libraries (D-Bus interface library, physics engine wrapper and others)
  • 85. What does the EFL include? Low level libraries (such as C data structures) Convenience libraries (D-Bus interface library, physics engine wrapper and others) Graphical libraries (canvas, UI toolkit and others)
  • 86. What does the EFL include? Low level libraries (such as C data structures) Convenience libraries (D-Bus interface library, physics engine wrapper and others) Graphical libraries (canvas, UI toolkit and others) Some non-portable wrapper mess
  • 89. Build system EFL uses GNU Autotools
  • 90. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children
  • 91. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems
  • 92. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems It’s problematic on Windows
  • 93. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems It’s problematic on Windows And kind of on OS X
  • 94. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems It’s problematic on Windows And kind of on OS X No real alternatives
  • 95. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems It’s problematic on Windows And kind of on OS X No real alternatives Potential alternatives so far proved to be worse
  • 96. Build system EFL uses GNU Autotools Autotools is a terrible monster that eats little children But it works acceptably on Unix-like systems It’s problematic on Windows And kind of on OS X No real alternatives Potential alternatives so far proved to be worse Had to go with the lesser evil
  • 98. Ecore main loop Works on all supported platforms
  • 99. Ecore main loop Works on all supported platforms Can use epoll on Linux for better performance
  • 100. Ecore main loop Works on all supported platforms Can use epoll on Linux for better performance Therefore we should also have kqueue support
  • 101. Ecore main loop Works on all supported platforms Can use epoll on Linux for better performance Therefore we should also have kqueue support Cleanup is needed - move the epoll parts out of mainloop source
  • 103. Ecore audio Currently only supports PulseAudio (limited support for ALSA)
  • 104. Ecore audio Currently only supports PulseAudio (limited support for ALSA) PulseAudio works on the BSDs
  • 105. Ecore audio Currently only supports PulseAudio (limited support for ALSA) PulseAudio works on the BSDs Most people don’t want it
  • 106. Ecore audio Currently only supports PulseAudio (limited support for ALSA) PulseAudio works on the BSDs Most people don’t want it Solution - implement OSS support
  • 109. Ecore drm Currently Linux only *BSD support would be relevant
  • 110. Ecore drm Currently Linux only *BSD support would be relevant Uses libinput and optionally systemd-login/logind (otherwise needs root)
  • 111. Ecore drm Currently Linux only *BSD support would be relevant Uses libinput and optionally systemd-login/logind (otherwise needs root) Solution for libinput - have to wait
  • 112. Ecore drm Currently Linux only *BSD support would be relevant Uses libinput and optionally systemd-login/logind (otherwise needs root) Solution for libinput - have to wait Solution for systemd-login/logind - perhaps ConsoleKit2?
  • 113. Ecore drm Currently Linux only *BSD support would be relevant Uses libinput and optionally systemd-login/logind (otherwise needs root) Solution for libinput - have to wait Solution for systemd-login/logind - perhaps ConsoleKit2? Or use the LoginKit shim
  • 114. Ecore drm Currently Linux only *BSD support would be relevant Uses libinput and optionally systemd-login/logind (otherwise needs root) Solution for libinput - have to wait Solution for systemd-login/logind - perhaps ConsoleKit2? Or use the LoginKit shim Depending on LoginKit feels messy
  • 116. Ecore wayland Also Linux only right now
  • 117. Ecore wayland Also Linux only right now Uses evdev
  • 118. Ecore wayland Also Linux only right now Uses evdev Solution for evdev?
  • 119. Ecore wayland Also Linux only right now Uses evdev Solution for evdev? GSoC 2014 implements evdev in FreeBSD, but not yet upstream
  • 120. Ecore wayland Also Linux only right now Uses evdev Solution for evdev? GSoC 2014 implements evdev in FreeBSD, but not yet upstream Other BSDs? Have everyone implement evdev?
  • 121. Ecore wayland Also Linux only right now Uses evdev Solution for evdev? GSoC 2014 implements evdev in FreeBSD, but not yet upstream Other BSDs? Have everyone implement evdev? Or split away the evdev stuff and write OS specific backends?
  • 122. Ecore wayland Also Linux only right now Uses evdev Solution for evdev? GSoC 2014 implements evdev in FreeBSD, but not yet upstream Other BSDs? Have everyone implement evdev? Or split away the evdev stuff and write OS specific backends? Also needs libwayland - need to wait for Wayland ports
  • 123. Ecore wayland Also Linux only right now Uses evdev Solution for evdev? GSoC 2014 implements evdev in FreeBSD, but not yet upstream Other BSDs? Have everyone implement evdev? Or split away the evdev stuff and write OS specific backends? Also needs libwayland - need to wait for Wayland ports Blocks on ecore drm
  • 124. Eeze
  • 125. Eeze Udev wrapper library (+ libmount)
  • 126. Eeze Udev wrapper library (+ libmount) Bad idea
  • 127. Eeze Udev wrapper library (+ libmount) Bad idea Temporary solution - use (and potentially extend) libdevq?
  • 128. Eeze Udev wrapper library (+ libmount) Bad idea Temporary solution - use (and potentially extend) libdevq? Might not be possible
  • 129. Eeze Udev wrapper library (+ libmount) Bad idea Temporary solution - use (and potentially extend) libdevq? Might not be possible Current plan - deprecate Eeze
  • 130. Eeze Udev wrapper library (+ libmount) Bad idea Temporary solution - use (and potentially extend) libdevq? Might not be possible Current plan - deprecate Eeze Come up with a high level library instead
  • 131. Eeze Udev wrapper library (+ libmount) Bad idea Temporary solution - use (and potentially extend) libdevq? Might not be possible Current plan - deprecate Eeze Come up with a high level library instead Platform specific backends in the library (udev, devd/libdevq...)
  • 134. Overview EFL portability problems also affect Enlightenment
  • 135. Overview EFL portability problems also affect Enlightenment No wayland support on *BSD
  • 136. Overview EFL portability problems also affect Enlightenment No wayland support on *BSD No eeze on *BSD
  • 137. Overview EFL portability problems also affect Enlightenment No wayland support on *BSD No eeze on *BSD And other problems
  • 138. Ptrace
  • 139. Ptrace Since a while ago, Enlightenment startup executable uses ptrace
  • 140. Ptrace Since a while ago, Enlightenment startup executable uses ptrace Used to catch segfaults and display a window allowing a restart
  • 141. Ptrace Since a while ago, Enlightenment startup executable uses ptrace Used to catch segfaults and display a window allowing a restart Replaces old unreliable way
  • 142. Ptrace Since a while ago, Enlightenment startup executable uses ptrace Used to catch segfaults and display a window allowing a restart Replaces old unreliable way PT GETSIGINFO is used - Linux specific extension
  • 143. Ptrace Since a while ago, Enlightenment startup executable uses ptrace Used to catch segfaults and display a window allowing a restart Replaces old unreliable way PT GETSIGINFO is used - Linux specific extension Therefore ptrace is not used on *BSD and a crash will go to tty
  • 144. Eeze
  • 145. Eeze Used to manage devices in Enlightenment
  • 146. Eeze Used to manage devices in Enlightenment No eeze → no device management
  • 147. Eeze Used to manage devices in Enlightenment No eeze → no device management Also used for backlight handling
  • 148. Eeze Used to manage devices in Enlightenment No eeze → no device management Also used for backlight handling Also used for temperature monitoring
  • 149. Eeze Used to manage devices in Enlightenment No eeze → no device management Also used for backlight handling Also used for temperature monitoring Solution: eeze replacement
  • 150. Mixer
  • 151. Mixer Current mixer module only supports PulseAudio and ALSA
  • 152. Mixer Current mixer module only supports PulseAudio and ALSA Also causes high CPU loads on FreeBSD with Pulse
  • 153. Mixer Current mixer module only supports PulseAudio and ALSA Also causes high CPU loads on FreeBSD with Pulse New mixer in development
  • 154. Mixer Current mixer module only supports PulseAudio and ALSA Also causes high CPU loads on FreeBSD with Pulse New mixer in development OSS support needed in the new mixer
  • 158. Distribution FreeBSD ports provide EFL/E → good Poor communication with upstream EFL and the other way around
  • 159. Distribution FreeBSD ports provide EFL/E → good Poor communication with upstream EFL and the other way around I’m the only bridge
  • 160. Distribution FreeBSD ports provide EFL/E → good Poor communication with upstream EFL and the other way around I’m the only bridge Relatively low interest (but there is some)
  • 161. Distribution FreeBSD ports provide EFL/E → good Poor communication with upstream EFL and the other way around I’m the only bridge Relatively low interest (but there is some) Situation getting better
  • 164. The good Evil library provides part of POSIX
  • 165. The good Evil library provides part of POSIX Most components have Windows related code
  • 166. The good Evil library provides part of POSIX Most components have Windows related code Native gdi/ddraw graphics backends
  • 167. The good Evil library provides part of POSIX Most components have Windows related code Native gdi/ddraw graphics backends Overall decent code coverage
  • 169. Build system Because of autotools, we can only support MinGW/MSYS environments
  • 170. Build system Because of autotools, we can only support MinGW/MSYS environments Create Visual Studio project files?
  • 171. Build system Because of autotools, we can only support MinGW/MSYS environments Create Visual Studio project files? Use CMake? Premake? ...
  • 172. Build system Because of autotools, we can only support MinGW/MSYS environments Create Visual Studio project files? Use CMake? Premake? ... Neither of these solutions provide some of our used Autotools features
  • 173. Build system Because of autotools, we can only support MinGW/MSYS environments Create Visual Studio project files? Use CMake? Premake? ... Neither of these solutions provide some of our used Autotools features No distcheck, no easy file pre-generation
  • 174. Build system Because of autotools, we can only support MinGW/MSYS environments Create Visual Studio project files? Use CMake? Premake? ... Neither of these solutions provide some of our used Autotools features No distcheck, no easy file pre-generation Create build scripts to trigger from build system?
  • 176. Availability The above → difficult to ship
  • 177. Availability The above → difficult to ship No official Windows builds
  • 178. Availability The above → difficult to ship No official Windows builds win-builds.org provides unofficial builds
  • 180. Other issues Ecore audio support should be added
  • 181. OS X
  • 184. The good Native Cocoa backend Unix-like guts → easy to cover
  • 185. The good Native Cocoa backend Unix-like guts → easy to cover Some FreeBSD APIs present (kqueue)
  • 187. Build system Similar issues as on Windows to a lesser degree
  • 188. Build system Similar issues as on Windows to a lesser degree Standard shell tools are present
  • 189. Build system Similar issues as on Windows to a lesser degree Standard shell tools are present XCode project files?
  • 191. Availability No official or unofficial builds (as far as I know)
  • 192. Availability No official or unofficial builds (as far as I know) You have to compile on your own
  • 193. Availability No official or unofficial builds (as far as I know) You have to compile on your own Major lack of testing (no CI setup, very few developers)
  • 195. Final summary Linux infra changes made an already difficult thing even more difficult
  • 196. Final summary Linux infra changes made an already difficult thing even more difficult Code modularization and abstraction is needed
  • 197. Final summary Linux infra changes made an already difficult thing even more difficult Code modularization and abstraction is needed Build system might not be ideal, but it’s the best we have
  • 198. Final summary Linux infra changes made an already difficult thing even more difficult Code modularization and abstraction is needed Build system might not be ideal, but it’s the best we have Windows support is a little painful
  • 199. Final summary Linux infra changes made an already difficult thing even more difficult Code modularization and abstraction is needed Build system might not be ideal, but it’s the best we have Windows support is a little painful Same goes for Mac
  • 200. Final summary Linux infra changes made an already difficult thing even more difficult Code modularization and abstraction is needed Build system might not be ideal, but it’s the best we have Windows support is a little painful Same goes for Mac Improvements are coming :)
  • 201. Thank you. Daniel Kolesa Samsung Open Source Group d.kolesa@samsung.com @octaforge FOSDEM 2015