Today marks the one year anniversary of open-sourcing ChakraCore – the core of the Chakra JavaScript engine that powers Microsoft Edge – under the MIT license. We wanted to take a moment to say thank you to everyone in the community who has contributed, helped and partnered with us!

Your contributions and feedback help us improve and create a better product for the community. During this period, we’ve had over 70 contributors, both internal and external, directly contribute to the ChakraCore codebase and several other members of the JavaScript community engaged with us, both in individual capacity and as organizations. New products and services such as TypeScript, Open Translators to Things, and HoloJS are now using ChakraCore. And it’s been great to see work outside of the core engine proving valuable to the community with things like ChakraCore’s test suite landing in WebKit and SpiderNode building on ChakraShim.

In the last year, we’ve talked about several capabilities that we shipped in ChakraCore including JavaScript language support and performance optimizations focused on real-world user experiences. In addition, we’ve brought new technologies such as Time Travel Debugging and WebAssembly to the engine. Today, we’d like to share a bit more about the progress that we’ve made taking ChakraCore cross-platform.

The road to ChakraCore parity on Linux

One of the key goals we set for ChakraCore when it went open source was to enable it to run on platforms other than Windows, starting with Linux, so that developers can use the engine for their needs regardless of the platform their apps or services run on. Last July, we shared our first experimental implementation of ChakraCore interpreter and runtime on x64 Linux (Ubuntu 16.04 LTS and Clang 3.8+) and macOS. This implementation enabled a high fidelity ChakraCore JavaScript interpreter to execute on the Linux platform.

While interpreters are often not great when it comes to throughput performance, they can be extremely useful in cases where the application or service has size or memory constraints, or the end user focus is on startup performance. This is because interpreters usually have low footprint and startup latency. They don’t need to keep copies of the JITed code that are created based on dynamic optimizations that are common across JavaScript JIT compilers. JITed functions are in general larger in size as compared to the compact bytecode. Also, interpreters can start executing code immediately, once it has been parsed.

For the scenarios where throughput performance matters, we landed the ChakraCore JIT in the master branch last December. However, the JIT compiler itself is not sufficient for higher throughput as performance quickly gets gated by the performance of the garbage collector, which is an inherent part of any modern JavaScript engine. Today, we are happy to share that we’ve also implemented the software writer-barrier support for Linux in the ChakraCore master branch, which is key to enabling ChakraCore’s concurrent and partial garbage collector.

With the JIT and the fully featured garbage collector landing in ChakraCore, all major architectural pieces of ChakraCore on Windows have now been ported to Linux. The team is now focused on adding the remaining few features such an Internationalization support, squashing the last set of bugs and optimizing the performance characteristics for ChakraCore on Linux to be on par with Windows.

What’s next

Our next steps for ChakraCore are always available on our roadmap. Today, we are intentionally not updating the roadmap significantly as the current items on the roadmap show our short-term focus – strengthening ChakraCore support on Linux and bring it to release quality, continuing our efforts within the Node.js community around coming up with ABI stable Node APIs, supporting more JavaScript and WebAssembly features, and improving performance for real-world usage patterns.

As we make further progress on the cross-platform related pieces in the upcoming months, you can expect a release of ChakraCore with better Linux support and performance. However, for those of you who’d like to try ChakraCore on Linux or macOS today and share your early feedback with us on the Beta quality support now available, here are the instructions for you to get started.

Once again, we are humbled as a team to work with the wonderful JavaScript community and would like to thank all of you who have contributed to the project and supported us. We look forward to further collaboration with the community and hope to see more developers contributing to the project and building cool things with ChakraCore over time. We love to hear your experience, your feedback, and to learn what you are building – so keep sharing! You can always reach us on the ChakraCore repo, via gitter or send us a tweet via @ChakraCore.

Gaurav Seth, Limin Zhu, and Brian Terlson; Program Managers, Chakra