Turn logo

Giving back to the open-source community

Turn relies heavily on field-proven, open-source software in all the layers of our technology stack. From Linux-based servers to the many open-source Java libraries our software uses, open-source software plays a crucial role in Turn's success. This is why we now give back to the community by making public some of our in-house developments under free and open-source software licenses.

Turn chose Github has the hosting platform for its open-source projects. Visit github.com/turn for a list of our public repositories.

Ttorrent

Turn's BitTorrent library, ttorrent, is an open-source, pure-Java implementation of the BitTorrent protocol, providing an easy-to-embed implementation with a BitTorrent tracker and a downloading/seeding client. Both the tracker and the clients provide hooks for easy integration in a larger application, allowing for tracker control, or download progression updates, for example.

Ttorrent has been showing very exciting results in terms of global distribution speed and minimal overhead for the initial seeder. Since its first release, ttorrent has received several contributions from members of the open-source community and has been deployed at Etsy as a means of distributing their Solr indexes (see Turbocharging Solr Index Replication with BitTorrent).

Queen

Queen is a platform for running scripts on many browsers. It's a HTTP server which is capable of brokering socketed communication between browsers which are connected to it and other applications or scripts. The Queen server can be thought of as a pool of browsers which you can execute any JavaScript/HTML on.

Queen comes with a RPC server for its thin-client, queen-remote allowing remote machines to execute code through Queen. The server can also populate its connection automatically by spawn browsers using Selenium, Sauce Labs or BrowserStack. Execution can be targeted based on user-agent, or browser capabilities (anything Modernizr can detect). Queen is the foundation of Thrill, our test runner.

Thrill

Thrill is a test runner for web applications. It leverages the Queen server, allowing many developers within an organization to use a central browser pool to execute their tests on. Thrill is capable of automatically detecting and injecting its adapter during testing to test suites using QUnit, jasmine, mocha, or YUI. This means minimal or no configuration is necessary to run tests suites using these frameworks.

Thrill can be run via command-line, grunt, or as an embedded library. It offers a simple API to write custom adapters or reporters, along with all the features of Queen.

Shapeshifter

Shapeshifter is a library bridging the gap between Protocol Buffers and JSON, for the purpose of building robust APIs whose payloads are well-defined and documented.

Shapeshifter schemas are instantiated from a Protocol Buffer message descriptor and can then be tuned and configured to customize the structure of the resulting JSON payload. Shapeshifter provides facilities for both outputting and parsing JSON from and into a Protocol Buffer message.

Shapeshifter supports JSON-Schema and is able to generate the appropriate representation from a configured schema instance.

Fusion-io NVMKV API Java Bindings

Fusion-io's NVMKV API is a native interface to Fusion-io's flash storage devices that exposes NoSQL-style key/value store semantics. Fusion-io's ioDrive devices deliver incredible amounts of performance, providing a large number of IOPS with very low latency. Being able to access the flash with key/value store primitives allows for the bypass of traditional filesystems and database applications to unlock the maximum performance of the underlying storage.

nvmkv-java is a full featured, JNI-based Java binding for this API that allows its use from Java programs. It exposes all the features of Fusion-io's C/C++ library while making sure that they are presented in an easy-to-use, Java-flavored API.

For more information, you can also take a look at Fusion-io's OpenNVM open-source page at opennvm.github.io.