About this post
The subject is software development environments that are easy to set up and use from anywhere.
This post’s quality is low:
- written quickly
- more questions than answers
- from my limited experience, not exhaustive
- it discusses programming embedded micro controllers, not programming in general
- to minimize effort administering your development environment, and maximize time spent writing software (SetupEase)
- to work from any physical location (Mobility)
- to use version control (Versioning)
- not to lose work (Backup)
- to share (OpenSource)
Some software developers work in a single development environment in a single location. Others may switch between many environments and many locations. For example, software developers for embedded systems might switch environments for each brand of microprocessor they use. They may develop at home and at work.
The State of the Art
AFAIK, there is not currently a development environment that gives you all of the above.
- Containers or virtual machines
- IDE’s in the cloud
Github the software provides you Versioning and Github.com the website gives you some Mobility. But it only gives you Mobility for your source and some parts of your development environment ( such as makefiles), not for your total development environment (such as what compiler you are using.) And the Mobility is clunky, you can’t work in your open master repository, you must work in a clone and remember to push to origin master after each work session, so that your work will be available tomorrow from another location.
Dropbox gives you Mobility for your source files: anywhere you work, your files will be automatically synchronized (with slight lags.) And you can put Github clones inside Dropbox. But you still don’t have Mobility for your complete development environment, since your IDE or compiler is installed locally, not in Dropbox.
Containers or virtual machines give you SetupEase. Someone else can install and configure your development environment, and you download and use the whole. For example, a development environment for open source OS Mynewt is available in a container.
But containers don’t give you Mobility. You must set up distinct (but identical) container instances in every location. Any files you create in a container instance, and any modifications to the development environment, are local to the container instance. Your container could include Dropbox having a Github clone, but you still must remember to push after each session, and that might not mobilize any modifications to the environment in the container instance.
IDE’s In the Cloud
Also known as “IDE as service.” Here, you run your development environment in a browser. A server:
- stores your source files
- stores your environment
- does all the compilation
- runs and debugs your app (with help from an agent to the target device)
An example is Texas Instrument’s CCS Cloud. My knowledge is limited. AFAIK it give you SetupEase, Mobility, and Backup. It doesn’t seem to give you Versioning and Share. It seems to let you clone Github repositories, but not commit in the clone, or push to the origin.
TI admits in the FAQ for CCS Cloud that for advanced work you probably will need to use CCS on the desktop. In other words, CCS Cloud is only for experimenting or trials.
CCS Cloud does let you download any files from it, so you could use a manual process in which after every session, you download, commit, and push any files you have changed in CCS Cloud to your master Github repository in Dropbox.
Other examples might be “Particle online” and “mbed online.” (I don’t know these.)
EmbeddedWeekly blogs a little about this subject. I read that before writing this post.