This is one developer's Point Of View:
Dno was created out of frustration with the Arduino IDE. In particular:
its slowness;
The IDE is slow everywhere. It's slow to start, slow to compile, slow to do anything.
its clunkiness;
Everything about it is clunky. The tiny edit window. The weird buttons. The way that it always starts up halfway between my 2 monitors. The menu entries that look like headings...
its attitude;
Here's how you write software: you bring up a really crappy editor that has no interest in how you want to use your filesystem and that does not have the power of the tools that you normally use. No, you can't use standard tools. And, no you can't build from the command line: well, you can but the commands are insane.
“But this is the right way to do it. In fact it's the only way.”
That's the attitude I'm talking about. And it sucks.
Many IDEs have that attitude. And many of their users buy-in to it. You will often hear the question, “why would you not use whatever?”, when the real question should be “why can't I use tools that I am familiar with?”
its inflexibility.
The editor has no flexibility. It is neither powerful nor customisable. It doesn't, by default, access your normal files, and creates new files where it wants to, taking no account of the way you want your directory structured.
The IDE provides no way to actually develop libraries. You can write them, but you can't test them or document them. It's a toy development environment for toy devlopment.
So, I didn't like the IDE. I tried using a proper editor and cutting and pasting my code into the IDE. That sucked.
I know there are other IDEs, like eclipse, that maybe don't suck, but I still don't like IDEs.
I tried using the CLI. But the commands are pure mental: way too many parameters. That sucked. Even with some moderately smart scripts to run it all.
I found Arduino.mk
. Finally, something that
didn't suck. It showed that normal tools like
make
could be used.
But it was really stuck in the avr
world,
and it still required a bit too much hand-holding, particulary
around library use.
I looked at hacking it, and discovered a lot about
make
that I didn't know. It was a very
good piece of work, but still not quite right.
I developed my own version of Arduino.mk
that tackled some of the problems, but it still didn't feel
right. Copies of the makefile had to be put in place in each
directory. But library discovery worked pretty well.
It all came together when I was trying to parse the
platform.txt
file. I finally realised that
a simple transform could turn it into makefile syntax. And
then I discovered make's eval
function and
everything was suddenly possible.