This talk will discuss how Pipelight combines Wine with native Linux code to run Windows NPAPI plugins such as Silverlight, Flash, and Unity3D in Linux browsers.
Pipelight is a special browser plugin which allows one to use Windows browser plugins inside Linux browsers. To make this possible Pipelight acts as a normal plugin and redirects function calls through a pipe to a process running in Wine. Although the idea may seem to be a bit overly complicated at first sight it turned out to be very useful from many perspectives. This approach allows for the seamless integration of these plugin into Linux browsers, while only running the plugin itself in Wine (which improves the performance and makes debugging a lot easier). In this talk we will especially focus on what is going on behind the scenes. We will show various problems we came across while developing Pipelight when trying to combine Linux and Wine applications inside a single project and explain how it is possible to translate between the differences of the Linux and Windows API and NPAPI. We will also talk about changes we made to Wine, including embedding the Wine window inside the browser and properly capturing input for the embedded windows. While working on Pipelight we also stumbled over bugs and raceconditions inside browsers like Chrome or Opera and the plugins themselves. We'll briefly talk about these issues and how Pipelight tries to workaround them. Last, but not least, we will discuss the security aspects arising from running Windows plugins and how Pipelight intrinsically protects you from certain kinds of attacks without any extra configuration.