11,979 karma · joined June 18, 2008
Personal blog at alexandros.balena.io
I am also @alexandrosm on twitter.
Contact me at alexandros@balena.io, I'm friendly!
All this said, I do sometimes wish we had started with a monolith, if only because we paid the microservices tax in deployment and infrastructure maintenance way too early, long before we had the scale to warrant it. I feel starting with a monolith would have probably meant more progress in less time, though with a risk of not being able to refactor smoothly when the time came.
Overall a hard call to make, since I'm happy with the result, but wonder about the pain it took to get here, and at the same time counterfactual universes are hard to instantiate...
If you need pure OTA, mender is a great solution. Resin is about containers first and foremost, with full-blown host updates being a lot more rare, since the host is a lot simpler.
Different things work for different projects, hope yours goes well!
Disclaimer: resin.io founder, we're so happy you chose resin for this awesome project ;)
Sounds like a call for a shameless plug! We have recently released resinOS[1] as a stand-alone OS after a few years of development and production deployments on resin.io[2] connected devices.
[1]: https://resinos.io [2]: https://resin.io
Resin.io allows IoT developers to push Linux Containers to embedded devices. See our demo of updating a drone in-flight at DockerCon [1]. We're very emphatic about our remote culture [2].
The resin.io team is composed of people passionate about quality code, well-thought out architecture, and great user experience. Etcher.io, a tool we recently released, is a good example of all those things. Most of our code is node.js though we're transitioning some parts of the stack to Go.
Some details on the individual roles:
Linux engineers - We're building a minimal OS for embedded devices[3]. Knowledge of Yocto Linux very helpful.
Security engineers - Passionate about building an end-to-end secure code delivery pipeline, from the cloud to the device, all the way down to the bootloader and CPU?
Backend engineers - Resin's backend is composed of ~10 node.js microservices, each with unique challenges.
UI/Front-end engineers - We're passionate about UX, and have a lot of cool features to build. Most of our UI is in AngularJS but knowledge of other frameworks a plus. Workflow engineers - Looking for full-stack developers passionate about optimising the way a remote team works.
If this all sounds interesting, drop us a line at join@resin.io
[1]: https://youtu.be/75vm6rRb6K0?t=1569 [2]: https://resin.io/blog/how-we-run-a-remote-team/ [3]: https://github.com/resin-os/
ResinOS does indeed have a smaller footprint, a broader set of supported architectures (Snappy only supports ARMv7 and above), and uses Docker instead of LXD+snaps.
Preloaded containers is something we have built out for resin.io, and will be extending to resinOS standalone as well. The current release is just the development version. Production version with preloading should follow.
We use node.js for the development toolkit, not for the OS components. There will always be programming language disagreements, but we find we are productive in node.js and it works for us. Coffeescript is admittedly getting a bit long in the tooth and we should switch to ES6 or TypeScript, but I personaly see that as a minor change, though a good one.
What does support of the other processors entail? Is it a kernel modification? Are you sure the dsp on the Beagle doesn't work? Say hi on the gitter channel ( https://gitter.im/resin-os/chat ) and the resinOS team will be there tomorrow morning (european time) to talk more.
The point of containers is to make updateability easy. To bring embedded software closer in line with what's going on in the cloud. To enable the kinds of workflows we have had in every other part of the development world for decades. It may or may not be right for your project. So long as you understand the intention and make informed choices about the tradeoffs, there will always be cases that fall in the one or the other side of the fence. I don't perceive this as being a dick, you're stating a reasonable case for a model that does indeed work for a lot of cases.
We will continue working to reduce overhead, hopefully power requirements and cost will go down, and somewhere along the curve, we may even meet your needs at some point. Whatever the case, we're pretty sure we'll never cover everything so if we gave the impression that resinOS will end all embedded OSes, then it was the wrong impression to give. :)
The number of containers is kinda a red herring for a couple reasons. For one, you can make a trivial container and launch as many containers as you like, it really depends on what's in them. For another, embedded devices don't usually need hundreds of containers, they run payloads that are either single-container, or look a lot more like a docker-compose file with a few microservices.