SlideShare a Scribd company logo
WAM: an embedded web
runtime history
Introduction and retrospective
February 4th, 2023. FOSDEM @ Brussels
José Dapena Paz < >
jdapena@igalia.com
1
About me (1/3)
José Dapena Paz “dape”
Software engineer at Igalia for 21 years, and one of its
founders.
2
About me (2/3)
From Galicia, Spain.
Galicia in Europe | By David Sebastian Liuzzo, Alexandre Vigo | CC BY-SA 3.0
3
About me (3/3)
Member of Igalia Chromium team.
Some projects:
LG webOS web engine integration (2012-today)
WAM for AGL (2018-2022)
Nokia Meego and Maemo (2005-2011)
4
Igalia
Open source consultancy, focused on the web
ecosystem.
+100 engineers all around the world.
2nd main contributor to Chrome, right after Google.
2nd main contributor to WebKit, right after Apple.
Teams around web engines and platform, graphics,
compilers, ...
5
Why this talk?
I started working on webOS in October 2012 (10 years
ago!).
10 years feels like a good time to write about history.
6
Agenda
What is WAM?
Where is it used?
How it works?
What is good about WAM?
Retrospective
Future
7
What is WAM
8
What is WAM
WAM = Web Application Manager
9
What is WAM
WAM = Web Application Manager
LG webOS web runtime.
9
What is WAM
WAM = Web Application Manager
LG webOS web runtime.
On top of Chromium.
9
What is WAM
webOS
An Operating System for embedded products.
It is web centric: web applications are first class
citizens.
10
What is WAM
webOS
Yocto / Openembedded Core.
Wayland / QML / Maliit.
Unified media server.
Luna bus for IPC.
11
What is WAM
WAM = Web Application Manager
LG webOS web runtime.
On top of Chromium.
12
What is WAM
WAM = Web Application Manager
LG webOS web runtime.
On top of Chromium.
WAM is the center piece of web experience in webOS.
12
Where is it used?
13
Where WAS it used?
HP Touchpad
Some Palm phones
14
Where is it used?
LG webOS TV, from 2013.
15
Where is it used?
Some LG products and experiments that use or used
webOS and WAM:
16
Where is it used?
LG webOS Open Source Edition, from 2018.
17
Where is it used?
Linux Foundation Automotive Grade Linux (AGL) web
runtime.
Port done adapting to the AGL application framework.
18
How it works?
19
How it works?
20
What's good about WAM?
21
What's good about WAM?
Support of web platform standards
WAM is based on Chromium: high support for web
platform standards.
Document model, JS, CSS.
Device APIs.
Graphics APIs.
Media, WebRTC
Storage, security
22
What's good about WAM?
Application lifecycle
WAM runtime manages the running web applications:
Launching, closing
Suspend/resume
Recovery
23
What's good about WAM?
Performance
A goal of WAM is using the system resources
efficiently:
CPU and GPU memory.
CPU usage.
Launch time optimization.
24
What's good about WAM?
Security
Local packaged applications and remote web
applications.
Following web security origin model.
Application manifest permissions.
25
What's good about WAM?
Developer tools
Web inspector and developer tools
Chromium tracer
26
What's good about WAM?
Proven technology
Shipped in millions of LG smart TVs...
... and +10 years of experience.
Nowadays also adopted for the AGL reference platform.
27
What's good about WAM?
Open source license
Apache 2.0 license
https://webosose.org
https://github.com/webosose/wam
28
Retrospective
29
Retrospective
Caveat
I have been working on webOS web integration since
October 2012.
History of WAM seems to start around 2008.
I will mostly focus on what I lived.
30
Retrospective
From HP/Palm to LG TV
2010: HP bought Palm...
2011: ... Then HP decides to cancel new webOS
products. Last device: HP Touchpad.
31
Retrospective
From HP/Palm to LG TV (2/2)
2012: partnership LG+HP for using webOS on LG
SmartTV.
2013: LG acquires Palm software development unit
from HP: LG Silicon Valley Labs is born.
2014: LG webOS based TV are introduced in CES Las
Vegas. TV are released a few months later.
32
Retrospective
webOS and Open Source: Open WebOS
(1/2)
June 2012: HP/Palm releases OpenWebOS
Code still available at
2012: after LG acquisition, OpenWebOS is not
maintained anymore!
https://github.com/openwebos
33
Retrospective
webOS and Open Source: Open WebOS
(2/2)
So:
I guess it was useful to attract LG to invest in webOS.
LG preferred to focus on making LG webOS TV
happen.
My view: the webOS TV effort was a huge challenge.
No time for anything else.
34
Retrospective
Open Source: webOS OSE (1/3)
June 2018: LG releases webOS Open Source Edition
See
Focus:
Allow prototyping ideas and products.
For students, independent developers.
Create a community around it.
https://webosose.org
35
Retrospective
Open Source: webOS OSE (2/3)
It is active nowadays.
Hardware target: Raspberry PI (nowadays PI 4 models).
My view:
It simplified testing new ideas.
Integration of parts for AGL for automotive, ROS for
robotics.
36
Retrospective
Open Source: webOS OSE (3/3)
Do you want to integrate web UI in your experimental
product? webOS OSE can help!
37
Retrospective
From webOS to AGL (1/2)
Collaboration LG + Igalia + Linux Foundation.
Before 2018: Igalia assisted Chrome browser work with
Wayland
May 2018: LG Silicon Valley Labs experiment to port
WAM to AGL
38
Retrospective
From webOS to AGL (2/2)
The 2018 experiment proved it was possible.
Focus on a web-only demo:
System UI + web applications
Integration of third party applications.
Integration with system services.
In last 4 years WAM evolved with AGL.
39
Retrospective
From QtWebKit to webOS WebView (1/2)
2012: WAM was based on QtWebKit
2012-2013: Moved to QtWebKit2 (multiprocess
architecture).
2014-2015:
Moved to Blink following market trend after Blink
forked from WebKit.
Based on QtWebEngine.
40
Retrospective
From QtWebKit to webOS WebView (2/2)
2015-today:
Created webOS WebView layer and dropped
QtWebEngine.
Why?
No strong QWE specific use cases.
Qt started moving towards commercial and tighter
open-source licensing policies
41
Retrospective
From Qt to Qt-less (1/2)
WAM has been based on Qt for a long time.
But...
GPLv3 licensing of Qt was problematic for some
stakeholders (but not LG).
C++, STL and Chromium C++ libraries grew better and
better. Not much benefit on Qt.
42
Retrospective
From Qt to Qt-less (2/2)
From 2021, WAM does not depend on Qt anymore.
Based on STL and other C++ libraries + Glib.
QMake -> CMake.
43
Retrospective
Stability (1/2)
But... essentially, main ideas of WAM did not change in
last 10 years.
44
Retrospective
Stability (2/2)
It proved useful, and architecture flexible enough to
adapt to:
Web engine changes.
Dependencies changes.
New products
Even OS changes.
45
Future
46
Future
webOS is here to stay!
LG is increasing the bet
for webOS on SmartTV
through .
webOS Hub
47
Future
Some topics...
GCC or Clang?
How to improve upgrade cycles?
48
Final remarks
49
Final remarks
+10 years of project. More to come!
Proved useful for many products and
millions of users.
A great piece to make web a first class
citizen of a platform.
Thanks!
50
51

More Related Content

What's hot

ansible why ?
ansible why ?ansible why ?
ansible why ?
Yashar Esmaildokht
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
Roberto Messora
 
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
Emertxe Information Technologies Pvt Ltd
 
Shorten Device Boot Time for Automotive IVI and Navigation Systems
Shorten Device Boot Time for Automotive IVI and Navigation SystemsShorten Device Boot Time for Automotive IVI and Navigation Systems
Shorten Device Boot Time for Automotive IVI and Navigation Systems
National Cheng Kung University
 
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Opersys inc.
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Opersys inc.
 
Docker multi-stage build
Docker multi-stage buildDocker multi-stage build
Docker multi-stage build
Alexei Ledenev
 
Extreme Linux Performance Monitoring and Tuning
Extreme Linux Performance Monitoring and TuningExtreme Linux Performance Monitoring and Tuning
Extreme Linux Performance Monitoring and Tuning
Milind Koyande
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
Gary Bisson
 
Reusing your existing software on Android
Reusing your existing software on AndroidReusing your existing software on Android
Reusing your existing software on Android
Tetsuyuki Kobayashi
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
National Cheng Kung University
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
Nanik Tolaram
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
Rayed Alrashed
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
Yu-Hsin Hung
 
Ansible
AnsibleAnsible
Ansible
Vishal Yadav
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
National Cheng Kung University
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
Robert Reiz
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
Emertxe Information Technologies Pvt Ltd
 
Ansible
AnsibleAnsible
Ansible
Rahul Bajaj
 

What's hot (20)

ansible why ?
ansible why ?ansible why ?
ansible why ?
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
 
Shorten Device Boot Time for Automotive IVI and Navigation Systems
Shorten Device Boot Time for Automotive IVI and Navigation SystemsShorten Device Boot Time for Automotive IVI and Navigation Systems
Shorten Device Boot Time for Automotive IVI and Navigation Systems
 
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
 
Docker multi-stage build
Docker multi-stage buildDocker multi-stage build
Docker multi-stage build
 
Extreme Linux Performance Monitoring and Tuning
Extreme Linux Performance Monitoring and TuningExtreme Linux Performance Monitoring and Tuning
Extreme Linux Performance Monitoring and Tuning
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
 
Reusing your existing software on Android
Reusing your existing software on AndroidReusing your existing software on Android
Reusing your existing software on Android
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
 
Ansible
AnsibleAnsible
Ansible
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Ansible
AnsibleAnsible
Ansible
 

Similar to WAM: An embedded web runtime history for LG webOS and Automotive Grade Linux

Mobile applications for SharePoint using HTML5
Mobile applications for SharePoint using HTML5Mobile applications for SharePoint using HTML5
Mobile applications for SharePoint using HTML5
Christian Heindel
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
Igalia
 
Web Technologies in Automotive & Robotics (BlinkOn 10)
Web Technologies in Automotive & Robotics (BlinkOn 10)Web Technologies in Automotive & Robotics (BlinkOn 10)
Web Technologies in Automotive & Robotics (BlinkOn 10)
Igalia
 
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Igalia
 
Mobile Platforms Redux
Mobile Platforms ReduxMobile Platforms Redux
Mobile Platforms Redux
Geoff Ballinger
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdf
ShaiAlmog1
 
Jalimo Slides Linuxtag2008
Jalimo Slides Linuxtag2008Jalimo Slides Linuxtag2008
Jalimo Slides Linuxtag2008
smancke
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
smancke
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
guestfa9375
 
[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh
IJET - International Journal of Engineering and Techniques
 
Interopability with Suse Linux: MoonLight Project
Interopability with Suse Linux: MoonLight Project Interopability with Suse Linux: MoonLight Project
Interopability with Suse Linux: MoonLight Project
Alessandro Binhara
 
A Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using DockerA Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using Docker
Ajeet Singh Raina
 
Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7
Marco Tabor
 
Webrtc plugins for Desktop Browsers
Webrtc plugins for Desktop BrowsersWebrtc plugins for Desktop Browsers
Webrtc plugins for Desktop Browsers
Alexandre Gouaillard
 
Serverless computing with Google Cloud
Serverless computing with Google CloudServerless computing with Google Cloud
Serverless computing with Google Cloud
wesley chun
 
Trends in webdesign
Trends in webdesignTrends in webdesign
Trends in webdesign
Bart De Waele
 
Trends in webdesign
Trends in webdesignTrends in webdesign
Trends in webdesign
bart_netlash
 
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
Niklas Heidloff
 
Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)
Quobis
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
Igalia
 

Similar to WAM: An embedded web runtime history for LG webOS and Automotive Grade Linux (20)

Mobile applications for SharePoint using HTML5
Mobile applications for SharePoint using HTML5Mobile applications for SharePoint using HTML5
Mobile applications for SharePoint using HTML5
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 
Web Technologies in Automotive & Robotics (BlinkOn 10)
Web Technologies in Automotive & Robotics (BlinkOn 10)Web Technologies in Automotive & Robotics (BlinkOn 10)
Web Technologies in Automotive & Robotics (BlinkOn 10)
 
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
 
Mobile Platforms Redux
Mobile Platforms ReduxMobile Platforms Redux
Mobile Platforms Redux
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdf
 
Jalimo Slides Linuxtag2008
Jalimo Slides Linuxtag2008Jalimo Slides Linuxtag2008
Jalimo Slides Linuxtag2008
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
 
[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh
 
Interopability with Suse Linux: MoonLight Project
Interopability with Suse Linux: MoonLight Project Interopability with Suse Linux: MoonLight Project
Interopability with Suse Linux: MoonLight Project
 
A Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using DockerA Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using Docker
 
Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7Mobile Developer's Guide To The Galaxy Vol.7
Mobile Developer's Guide To The Galaxy Vol.7
 
Webrtc plugins for Desktop Browsers
Webrtc plugins for Desktop BrowsersWebrtc plugins for Desktop Browsers
Webrtc plugins for Desktop Browsers
 
Serverless computing with Google Cloud
Serverless computing with Google CloudServerless computing with Google Cloud
Serverless computing with Google Cloud
 
Trends in webdesign
Trends in webdesignTrends in webdesign
Trends in webdesign
 
Trends in webdesign
Trends in webdesignTrends in webdesign
Trends in webdesign
 
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
OpenNTF Webinar 05/07/13: OpenNTF - The IBM Collaboration Solutions App Dev C...
 
Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 

More from Igalia

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Igalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
Igalia
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
Igalia
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
Igalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
Igalia
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
Igalia
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Igalia
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
Igalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
Igalia
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
Igalia
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
Igalia
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
Igalia
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Igalia
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
Igalia
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
Igalia
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
Igalia
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
Igalia
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Igalia
 

More from Igalia (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
 
Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...Enable hardware acceleration for GL applications without glamor on Xorg modes...
Enable hardware acceleration for GL applications without glamor on Xorg modes...
 

Recently uploaded

Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 

Recently uploaded (20)

Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 

WAM: An embedded web runtime history for LG webOS and Automotive Grade Linux

  • 1. WAM: an embedded web runtime history Introduction and retrospective February 4th, 2023. FOSDEM @ Brussels José Dapena Paz < > jdapena@igalia.com 1
  • 2. About me (1/3) José Dapena Paz “dape” Software engineer at Igalia for 21 years, and one of its founders. 2
  • 3. About me (2/3) From Galicia, Spain. Galicia in Europe | By David Sebastian Liuzzo, Alexandre Vigo | CC BY-SA 3.0 3
  • 4. About me (3/3) Member of Igalia Chromium team. Some projects: LG webOS web engine integration (2012-today) WAM for AGL (2018-2022) Nokia Meego and Maemo (2005-2011) 4
  • 5. Igalia Open source consultancy, focused on the web ecosystem. +100 engineers all around the world. 2nd main contributor to Chrome, right after Google. 2nd main contributor to WebKit, right after Apple. Teams around web engines and platform, graphics, compilers, ... 5
  • 6. Why this talk? I started working on webOS in October 2012 (10 years ago!). 10 years feels like a good time to write about history. 6
  • 7. Agenda What is WAM? Where is it used? How it works? What is good about WAM? Retrospective Future 7
  • 9. What is WAM WAM = Web Application Manager 9
  • 10. What is WAM WAM = Web Application Manager LG webOS web runtime. 9
  • 11. What is WAM WAM = Web Application Manager LG webOS web runtime. On top of Chromium. 9
  • 12. What is WAM webOS An Operating System for embedded products. It is web centric: web applications are first class citizens. 10
  • 13. What is WAM webOS Yocto / Openembedded Core. Wayland / QML / Maliit. Unified media server. Luna bus for IPC. 11
  • 14. What is WAM WAM = Web Application Manager LG webOS web runtime. On top of Chromium. 12
  • 15. What is WAM WAM = Web Application Manager LG webOS web runtime. On top of Chromium. WAM is the center piece of web experience in webOS. 12
  • 16. Where is it used? 13
  • 17. Where WAS it used? HP Touchpad Some Palm phones 14
  • 18. Where is it used? LG webOS TV, from 2013. 15
  • 19. Where is it used? Some LG products and experiments that use or used webOS and WAM: 16
  • 20. Where is it used? LG webOS Open Source Edition, from 2018. 17
  • 21. Where is it used? Linux Foundation Automotive Grade Linux (AGL) web runtime. Port done adapting to the AGL application framework. 18
  • 24. What's good about WAM? 21
  • 25. What's good about WAM? Support of web platform standards WAM is based on Chromium: high support for web platform standards. Document model, JS, CSS. Device APIs. Graphics APIs. Media, WebRTC Storage, security 22
  • 26. What's good about WAM? Application lifecycle WAM runtime manages the running web applications: Launching, closing Suspend/resume Recovery 23
  • 27. What's good about WAM? Performance A goal of WAM is using the system resources efficiently: CPU and GPU memory. CPU usage. Launch time optimization. 24
  • 28. What's good about WAM? Security Local packaged applications and remote web applications. Following web security origin model. Application manifest permissions. 25
  • 29. What's good about WAM? Developer tools Web inspector and developer tools Chromium tracer 26
  • 30. What's good about WAM? Proven technology Shipped in millions of LG smart TVs... ... and +10 years of experience. Nowadays also adopted for the AGL reference platform. 27
  • 31. What's good about WAM? Open source license Apache 2.0 license https://webosose.org https://github.com/webosose/wam 28
  • 33. Retrospective Caveat I have been working on webOS web integration since October 2012. History of WAM seems to start around 2008. I will mostly focus on what I lived. 30
  • 34. Retrospective From HP/Palm to LG TV 2010: HP bought Palm... 2011: ... Then HP decides to cancel new webOS products. Last device: HP Touchpad. 31
  • 35. Retrospective From HP/Palm to LG TV (2/2) 2012: partnership LG+HP for using webOS on LG SmartTV. 2013: LG acquires Palm software development unit from HP: LG Silicon Valley Labs is born. 2014: LG webOS based TV are introduced in CES Las Vegas. TV are released a few months later. 32
  • 36. Retrospective webOS and Open Source: Open WebOS (1/2) June 2012: HP/Palm releases OpenWebOS Code still available at 2012: after LG acquisition, OpenWebOS is not maintained anymore! https://github.com/openwebos 33
  • 37. Retrospective webOS and Open Source: Open WebOS (2/2) So: I guess it was useful to attract LG to invest in webOS. LG preferred to focus on making LG webOS TV happen. My view: the webOS TV effort was a huge challenge. No time for anything else. 34
  • 38. Retrospective Open Source: webOS OSE (1/3) June 2018: LG releases webOS Open Source Edition See Focus: Allow prototyping ideas and products. For students, independent developers. Create a community around it. https://webosose.org 35
  • 39. Retrospective Open Source: webOS OSE (2/3) It is active nowadays. Hardware target: Raspberry PI (nowadays PI 4 models). My view: It simplified testing new ideas. Integration of parts for AGL for automotive, ROS for robotics. 36
  • 40. Retrospective Open Source: webOS OSE (3/3) Do you want to integrate web UI in your experimental product? webOS OSE can help! 37
  • 41. Retrospective From webOS to AGL (1/2) Collaboration LG + Igalia + Linux Foundation. Before 2018: Igalia assisted Chrome browser work with Wayland May 2018: LG Silicon Valley Labs experiment to port WAM to AGL 38
  • 42. Retrospective From webOS to AGL (2/2) The 2018 experiment proved it was possible. Focus on a web-only demo: System UI + web applications Integration of third party applications. Integration with system services. In last 4 years WAM evolved with AGL. 39
  • 43. Retrospective From QtWebKit to webOS WebView (1/2) 2012: WAM was based on QtWebKit 2012-2013: Moved to QtWebKit2 (multiprocess architecture). 2014-2015: Moved to Blink following market trend after Blink forked from WebKit. Based on QtWebEngine. 40
  • 44. Retrospective From QtWebKit to webOS WebView (2/2) 2015-today: Created webOS WebView layer and dropped QtWebEngine. Why? No strong QWE specific use cases. Qt started moving towards commercial and tighter open-source licensing policies 41
  • 45. Retrospective From Qt to Qt-less (1/2) WAM has been based on Qt for a long time. But... GPLv3 licensing of Qt was problematic for some stakeholders (but not LG). C++, STL and Chromium C++ libraries grew better and better. Not much benefit on Qt. 42
  • 46. Retrospective From Qt to Qt-less (2/2) From 2021, WAM does not depend on Qt anymore. Based on STL and other C++ libraries + Glib. QMake -> CMake. 43
  • 47. Retrospective Stability (1/2) But... essentially, main ideas of WAM did not change in last 10 years. 44
  • 48. Retrospective Stability (2/2) It proved useful, and architecture flexible enough to adapt to: Web engine changes. Dependencies changes. New products Even OS changes. 45
  • 50. Future webOS is here to stay! LG is increasing the bet for webOS on SmartTV through . webOS Hub 47
  • 51. Future Some topics... GCC or Clang? How to improve upgrade cycles? 48
  • 53. Final remarks +10 years of project. More to come! Proved useful for many products and millions of users. A great piece to make web a first class citizen of a platform. Thanks! 50
  • 54. 51