"firmware" vs "sketch" vs "program"


Continuing the discussion from Duplicated info docs vs forum. Referring to the Docs in the forum:

This is confusing to newcomers to microcontrollers, that there is only one program, no o/s, and that old-timers refer to all this as “firmware”. In the Arduino world they get around this by calling the application part of the firmware a “sketch”. We seem to have no similar word here in the Spark world for the application programmer’s / user’s contribution to the firmware. I understand how and why the terminology has arisen, but the Spark is not a simple microcontroller. The CC3000 has its own firmware. The one thread MCU model doesn’t apply to the CPU - there are background task(s) for the cloud - and those are firmware. The Spark almost has it’s own little o/s keeping everything cooperating. And that’s firmware. There is the original Tinker app, also called firmware. And then our applications are firmware.

Old-timers know what is meant by “firmware” from the context in which the term is used. For the rest of us it just seems as though there is an unnecessarily restricted terminology, as though the vocabulary is limited.

I don’t have the solution but @Rehaan is right: Why would any newcomer to MCUs think to look under a “Firmware” title for the Spark application programming language definition?


“Program” might be one widely-used word that is friendly to all.

Alternatively (and perhaps more correctly), it could just be referred to as “code”.

“Once you’re done with x, y, z, click the upload button to send your CODE to the spark core”

PS - In the docs, i think referring to it as “Language Reference” or something similar might be most self-explanatory. See here : https://community.spark.io/t/duplicated-info-docs-vs-forum-referring-to-the-docs-in-the-forum/5018/15?u=rehaan


Too right. Your example is spot on. “Code” or “program” or “sketch”. I know that my application code is compiled into the object code, one unit for setup() another for the loop() and others for libraries, and that this is linked into one big executable with a main() and many other functions I did not write and which I do not ever see, and that that executable is the “firmware” that is uploaded to the Spark. But the bit I provide is called what, exactly, in the Spark world?

And “language reference” would suit me fine for the docs.


There’s already a MASSIVE Arduino ecosystem out there. Trying to re-invent the wheel here is not only pointless, but also likely to fail.

May I suggest we use the following conventions:

  • the core code running on the STM32 is the ‘STM32 firmware’, or the ‘Spark Core firmware’
  • the code running on the CC3000 is then the ‘CC3000 firmware’
  • User code is then a ‘sketch’, following Arduino conventions. One could also call this a ‘user program’.