Version 5.0.0 Released!

Published on February 24, 2018 by asmithdev

v5.0.0

With great excitement comes version 5.0.0 of Hamsters.js, this version was a complete rewrite from the ground up with an emphasis on maintainability and bringing the library up to modern development standards. Now it's easier than ever to multithread your javascript!

Highlights

  • Completely rewritten from the ground up using ES6 classes
  • Adopted webpack
  • Abandoned bower support
  • Node.js now automatically detects available cores
  • Running npm run test actually works now
  • Resolved reactNative support
  • New searchable logging system (hamsters.logger)
  • Support for promise based execution

The main goals of this release was to get the library back to it's basics, Hamsters.js has always aimed to be a high/low level abstraction for parallel and threaded workloads. To that aim we no longer provide any out of the box abstractions or tools that are not required for library functionality, you will find that in hamsters 5.0.0 calling hamsters.tools will now be undefined.

A word with the open source community

Please consider supporting this project via our open collective, Hamsters.js has operated for the 3 years purely on out of pocket funding and the project does not want to abandon its open source aims in order to keep the lights on.

During the libraries time as an open source project we have needed to defend the project from copyright infringement and theft, my goals as the creator of this project was to give back to the JavaScript community and hopefully push the industry into making multithreading a more mainstream web application feature…after all whats the point of all these cores if we can't use them haha.

Almost immediately after publishing the library under the Artistic 2.0 license the library was cloned and all mentions of the source of the cloned project were removed giving the appearance that said user created an original from scratch project. This has happened on several occasions to varying degree over the past 3 years leaving me with a rather bad impression of the open source community as a whole, and again recently I was forced to spend over $1000 to stop a bad actor from blatantly infringing on the projects website and trade dress.

In the interest of full transparency a DMCA take down notice was issued through github to the offending repository and the host of the infringing website was contacted as well using a DMCA take down notice. This user persisted in the copyright infringement and moved web host a total of 7 different times using several methods to attempt to hide the host being used.

Ultimately after hiring a lawyer and contacting the user directly and sending a draft copy of a notice to file suit the offending party stopped the bad practices (for the time being), with these experiences it has proven to be costly both financially and mentally to continue to offer open source projects and support them. We need community support not only to continue to provide updates and support new hardware and features but also defend against these scenarios. - https://opencollective.com/hamstersjs/

Spectre & Meltdown

Part of the reason version 5 has been delayed is due to the discovery of the Meltdown and Spectre bugs, I had been working lately to change how the library operates so it can seamlessly support atomic operations behind the scenes. This would allow the library to dramatically reduce run time overhead and allow multiple threads to access a single shared array unfortunately right around the time I had hoped to release the new version it was announced these vulnerabilities existed in Intel X86 processors.

As a mitigation attempt all major browsers have since removed support for the most critical aspect of this functionality and that is the SharedArrayBuffer, this has had a major detrimental impact on the projects goals as I have waited a very long time for SharedArrayBuffer's to become mainstream only to have them removed due to security problems introduced by Intel.

Should SharedArrayBuffer support be brought back to browsers (unlikely at this point), then I will release a new version including them which will result a major performance bump for the library.

Final Words

This release marks 3 years Hamsters.js has been in development, this project started out as me simply wanting to learn more about parallelism and multithreading since I had rarely made use of it in my software development career. I want to thank everyone who has supported the project and has given their recommendations on how to improve the library, the lessons I learned through the development of this project have been monumental and they won't soon be forgotten.

Be sure to checkout the updated https://www.hamsters.io/wiki for more information on how to get started with v5.0.0

ENJOY