Inside Netflix’s Project Griffin: The History of Roku Under Reed Hastings (2013)
I remember the Roku platform fondly, even if it had some design flaws that left it hamstrung.  The biggest of those was the use of a proprietary language for app development called BrightScript.  A sort of bastardized VBScript (from what I&#x27;m told, as I don&#x27;t actually know VBScript, but it looks similar), all complex objects that required performance were &quot;components&quot; that you created with a special function, which really just provided a FFI to a system library through an in language object.  For example, the video player, or cURL, or different predefined display screen types.  The biggest downside to this approach is that the language was <i>slow</i>, and on a fairly low powered device to begin with, that made some things just too slow to be worthwhile.<p>As an example of this, a friend and I released a program called KidPaint, which was a simple paint&#x2F;stamp program modeled after Tux Paint.  Because the channel&#x2F;app had to small (~$500k), there was very limited space to ship PNg files for stamps, and drawing shapes manually was actually a multi-second process in many cases.  The way we found to get around this was to ship PNG shapes that were black with transparent backs, but with the black color defined in the palette block of the PNG.  We would copy the PNG in memory, overwrite the color from the palette section with the desired color, write it to ramdisk, and use the screen component to place a PNG on the screen at the right location and with the right rotation.  This process, including recomputing the CRC (and without shift operators, there was no bitshifts available), was much quicker than trying to implement deflate in brightscript, since it didn&#x27;t come with compression components we could load (which would have been implemented as a library).  It was hacky, it wasn&#x27;t quick, but it was right at the edge of usability, so it&#x27;s what we had to work with.<p>Now, imagine if they had just lifted one of open source the JS engines into the device.  They could still have extended it for loading components if they wanted (browsers do stuff like that too), but they could have leverages the thousands of man-hours put into optimizing those engines, plus the many, many different JS modules out there to help build the ecosystem.  Instead, we ended up writing our own serialization library, our own JSON parser&#x2F;emitter, our own TAP testing protocol, a MOP to make complex object creation and management easier, some functional programming helpers, etc.  We ended up open sourcing KidPaint and the libraries we wrote under <a href="https:&#x2F;&#x2F;github.com&#x2F;rokudev" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;rokudev</a> originally, but Roku eventually asked nicely for that name since it would be beneficial for them, and we acquiesced.  I think the original stuff is available now under <a href="https:&#x2F;&#x2F;libraries.io&#x2F;github&#x2F;rokudev&#x2F;librokudev" rel="nofollow">https:&#x2F;&#x2F;libraries.io&#x2F;github&#x2F;rokudev&#x2F;librokudev</a> (maybe?  I&#x27;m not actually seeing how to access it, and it would be a shame if it was gone).