Thorium Reader is the EPUB reader of choice for Windows 10, MacOS and Linux.
This is the only “reader” developed by EDRLab, which mostly leads the development of the Readium Mobile and Readium Desktop toolkits (see below).
Origin of the Readium project
Open-source projects need to be funded, it was therefore decided to create the Readium Foundation as “an Open Source Foundation collaboratively developing technology to accelerate the adoption of EPUB 3 and the Open Web Platform by the Digital Publishing Industry”. For some time, contributions and membership fees provided the necessary funding for the Readium SDK to evolve.
Thanks to Readium member efforts, the Readium C++ SDK and the Readium JS toolkit became solid open-source projects, a reference implementation for EPUB 3 processing, one of the rare software supporting EPUB 3 media overlays, MathML, right to left reading progression etc.
However, this C++ code was not as platform-neutral as it was aimed to be, as it was interspersed with directives targeting specific implementations. The rapid evolution of the mobile platform was creating headaches for the developers. Also, given the organic nature of an open-source development with constant turnover of developers, this hybrid codebase had become large and complex, with nobody having complete knowledge of its nitty-gritty details.
At the same time, W3C members from the publishing industry (including EDRLab) had started creating new specifications for Web Publications, which would support digital publications in many forms, i.e. traditional ebooks, audiobooks and visual narratives. Supporting these new formats would soon be needed on the Readium SDK, which would be a new pain knowing the complexity of the codebase.
The Readium SDK was at the time associated with a dual license, GNU and free for open-source projects, Apache and subject to yearly fees for commercial projects. This dual license was very useful for the maintenance of the codebase by senior developers, but was not evenly understood by implementers … was Readium really open-source?
This led several Readium members to conclude, late 2016, that it might well be time to step back from the current Readium codebase and approach and do some serious re-thinking.
A new licensing model
From February 2018, the licensing model of the Readium SDK was changed for a unique BSD-3 type license, free for any type of project, but with a strong suggestion to participate financially to the maintenance of the different projects by paid developers.
This made the situation unambiguous: yes, Readium is fully open-source.
This had however a major negative effect on the funding of the Readium Foundation, as the free contributions of Readium SDK users were never at the level of the previous “commercial” revenue.
A new project – “Readium 2”
A first goal of this project is to create a clean software architecture, modular and documented, which allows the easy development of reading applications on three types of platforms: mobile, desktop and Web. Different implementations can therefore share the same architecture, model, interfaces; a developer should therefore be able to switch from one implementation to another without feeling lost.
A second goal is to enable the processing of any kind of publication, including new versions of EPUB files, but also audiobooks and visual narratives (comics / manga / bandes dessinées). Readium 2 is a framework for interpreting and rendering any digital publishing markup.
All software modules are intended to be, insofar as possible, independent of one or another and can be used independently of the overall framework. At the same time, these modules must be designed so that they CAN be easily and seamlessly combined to produce complete reading systems.
For rendering content, this framework leverages the capabilities of modern browser engines and supplement those capabilities with separate modules (polyfills, if you will) that provide additional functionalities.
Another aspect of this framework is that instead of a “platform-neutral” C++ core, a large part of the mobile framework is implemented in native code, i.e. Swift for the iOS target and Kotlin for the Android target. This enables the use of the most powerful aspects of each native environment and should end up with less code, more efficient.
On the other side, desktop applications (on Windows, OSX and Linux) are approached using cross-platform technologies, i.e. Electron.js, node.js, Typescript. This fills the gap that Readium left open so far, with no real interest from the community for the development of a native Windows and Linux SDK.
This project is therefore split in four parts:
Readium Architecture, a software architecture common to the different implementations.
Readium Mobile, a toolkit for iOS and Android reading apps, with Readium LCP support.
Readium Desktop, a toolkit for Windows, MacOS and Linux reading apps, with Readium LCP support.
Readium Web, a toolkit for Web apps.
Also, the Readium LCP project is in scope here, as LCP modules have been developed as part of Readium Mobile iOS, Readium Mobile Android and Readium Desktop.
The project was split in four phases:
- Report the good and bad aspects of the current Readium implementation. This report was driven in 2016 by the interview of those application developers who have intensively used Readium (readium-js and/or readium-sdk) and, for some of them, forked the code to obtain what was needed in their application. This study included a compilation of problematic EPUB samples and technical details about the areas where the Readium code should be optimized.
- Study the Readium Architecture design principles.
- Develop prototypes.
- Develop the actual implementations.
The first phase was achieved in September 2016. Its results have been described to the Readium members and should be published online, some day, on the Readium documentation website.
The second phase started in September 2016, with a top to bottom approach and the definition of two main modules to be found in any implementation : a “streamer” to parse digital publications and expose them via an http server, and a “navigator” to expose the publication in a rendering engine.
The prototyping phase started at the same time, with the Swift implementation first, followed by the Desktop implementation. The definitive Swift and Kotlin implementation started in September 2017. The definitive Desktop implementation only started in 2018.