Interview with JF, InfiniTime's creator
In this article, I am interviewing JF, who is working on the PineTime firmware since October 2019.
JF walks us through InfiniTime, from the first developments, up to the latest ones, which I have been documenting on this blog.
About you
Nico: Hi JF, it's a pleasure doing this interview with you!
For those who don't know you, could you introduce yourself?
JF: Hi, I'm JF, you may know me as JF002 on
Github and
Mastodon or Codingfield on
Twitter.
I'm passionate about open source
software and hardware, and I enjoy working on various projects based on SBCs,
microcontrollers and sensors!
I started working on my open source firmware project (which became InfiniTime) for the PineTime in October 2019, and I've never stopped since then!
Genesis
Nico: Right, so as this article is possibly going to be read by people who don't know Pine64, maybe we should start by explaining who they are and what they do?
JF: Pine64 is a company like none other.
Basically, they design, build and sell hardware and work together with a large
community of developers, hobbyists, open-source enthousiasts and users to
develop the software.
This is not a one-way collaboration : the community has the opportunity to actively
participate in all the steps of the products design. Pine64 communicates really
early on the devices they are working on, and takes all the feedbacks into
account. When prototypes are ready, they send them to developers from the
community so that they can work on the software (porting the kernel, writing
device drivers and firmware, building distributions,...).
The community also plays
an important role in the infrastructure (web site, forum, chat rooms,...).
I really appreciate this community driven philosophy!
Nico: And of course, as part of all the stuff that Pine64 is doing, we find
the PineTime.
When I first stumbled upon it (I think it was early 2020), what amazed me was
the price tag, which was really low (around 30€), without sacrificing features -
I mean it has almost everything you could expect from a smartwatch (touch
screen, accelerometer, heart-rate sensor, vibrator and of course Bluetooth) and
is just lacking a GPS chip.
Was PineTime your first "contact" with Pine64? And what made you jump onboard the dev boat?
JF: Before I learnt about the PineTime, I knew Pine64 as a company that builds ARM-based SBCs, and I was really interested in the outcome of the PinebookPro and the PinePhone, which looked very promising.
One day, probably in September 2019, I saw an article or a tweet about the
PineTime, an open-source smartwatch, and they were looking for developers to
build a software running on it.
There was not much details, but the article said
that we could send an email if we had knowledge in embedded development.
As I really enjoyed embedded software development, and already owned some equipment like
a debugger, I decided to send an email, explaining that I was really interested in
the project, that I had professional and personal experience in embedded
systems, and I provided the link to my Github account and to one of my most
"advanced" projects (JFBrew, a temperature controller for a fermentation chamber
to brew my own beer), and I asked how I could buy the devkit so that I could
experiment with it.
I was surprised when I received the answer : they just asked for my postal address so they could send me the devkit! They weren't asking for more information, for posts on social media, for some kind of promise I would do something useful : they would just send me the devkit and I would do whatever I want with it!
I received the devkit a few weeks later and have been working on it since then!

Nico: What were the initial challenges that you faced? And how did you deal with them?
JF: I think I was one of the first persons to receive the PineTime devkit and, at that time, there was close to no information available about it. The wiki page only contained the datasheets of the components and the schematics and that's it : no example code, no documentation on how to get started, nothing!
At that time, we were a few people in the community chat room working on several projects based on multiple RTOS and frameworks : Arduino, RioT, MynewT, FreeRTOS, embedded Rust,... And we were exchanging a lot of information on our achievements and experiments. That was really fun and interesting!
Slowly but surely we put together our projects, wrote documentation, wiki pages, blog articles,... and our projects were progressing faster and faster, from the first "led blink" project to a first "Hello world" on the display, to a BLE connection with a phone,...

Starting the project was a first challenge. Another technical challenge was BLE:
while I was comfortable with low-level aspect of the CPU and its peripherals, I
knew nothing about Bluetooth and Bluetooth Low Energy (BLE).
I had to learn how
it works, and how to integrate it in an embedded project from scratch.
But the biggest challenge, and the most interesting one was not technical, but
rather human : it was the first time I was working on a personal project in an open
source community.
I'm used to working with people sitting in the same room as me,
but working with people from all around the world, living in multiple
timezones, speaking many languages and with different backgrounds is all new to
me! That's really exciting!
We exchange our ideas and visions of the project,
we share our knowledge, and we build the project together - I'm really happy and
proud to be part of it!
Nico: Between the very first developments, and the release of version 0.7.1 (which marks a stability since it's the version embedded in the PineTime being shipped now), could you walk us through the different releases, things you added, things which didn't work initially, ...?
JF: When I look at the list of releases on GitHub, I'm really amazed by the amount of work I did, alone at first, and with many other contributors later on!
- The first release, version 0.1.0 already provided basic functionalities : display the time, BLE connection and time synchronization. There was no touch interface, the UI was slow and basic.
- Version 0.2.2 was the first release that received contributions from other
developpers. I was really amazed to see other people contributing to the
project!
- In version 0.3, I decided to switch from a custom graphics library to
LittleVGL, a light and versatile graphics
library for embedded systems. It's easy to use and it provides everything you
need to design nice UIs : support for display and touch interfaces, many
widgets (buttons, dial, progress bar,...) and themes.
I think this was a wise choice since I'm not good at all at designing UIs! - Version 0.5 was a nice release too: in this release, I decided to change the
BLE stack used in the project. Initially, the BLE connectivity was managed
using the NRF SoftDevice, the BLE stack from Nordic Semiconductor.
Don't get me wrong: SoftDevice is nice, is well documented and works very well but... it's closed source software! One of my goals with this project was to build a 100% open source project and for that, I couldn't keep SoftDevice.
Fortunately, there is an alternative BLE stack compatible with the NRF52 MCU which is open source : NimBLE. It's part of the Mynewt project, but it can be integrated as a standalone library in projects that are not based on this RTOS.
The other achievement from version 0.5 is that it's the first version to be supported by a companion app : Amazfish! Thanks again to Adam, its creator, for integrating my project in Amazfish and for helping me design the BLE interface! - Version 0.6 brought the OTA functionality, allowing users to upgrade the firmare
over-the-air, using their smartphone and BLE connectivity!
- And finally comes version 0.7, which brought improvements, optimisations...
At that time, Pine64 asked the community to choose and send a firmware for the next production batch, and I'm really proud we chose Pinetime-JF, which was renamed InfiniTime soon after.
Fun fact: Just a few days before sending the 0.7 files to the factory, some users noticed that the touch panel would not work correctly from time to time, after a reset. We quickly fixed that bug in version 0.7.1 which made its way up to the PineTime factory!
Initial release / 0.7.1
Nico: Someone who buys a PineTime today (actually 3, since we can only buy a
3-pack, unless you want an unsealed, dev kit) will start with a super basic
firmware, but doing an OTA upgrade to the latest one (0.15.0 as of writing this
article) will give a much better experience.
Now, can I ask how the project is handled? Like which features should be added,
when a release shall be pushed? Is that like a "typical" open-source project,
using Github's issues, Pull Requests, and so on?
JF: To be honest, reading your article about InfiniTime firmwares
history
helped me realise what a long way we had come!
The UI has improved a lot, there are 2 games, a music control
application, a navigation application, more integration with multiple companion
apps, ... That's amazing!
Every project is different, but I guess we can say that InfiniTime is handled
like many other projects on GitHub : people report bugs, ask for new features,
suggest new ideas, create pull request to fix bugs, add features and
improvements.
They also participate to the review of other contributors PRs,...
I'm always thrilled to see the project continues to live even when I'm sleeping!
In the end, as the creator of the project, I'm the one who has the final word :
I decide if and when a PR can be merged, I am the one who publishes the
releases, I am the one who takes the decisions when several opinion diverge,...
Said like that, it looks like I'm a dictator who does what he wants. It's true,
but believe me, I do my best to help contributors with their PRs, to answer to
bug reports and feature requests, and to take the ideas and opinions of everyone
into account! That's not an easy work, but it's very rewarding to see the
project evolving day after day!
Nico: The project has now grown and there are more and more contributors, as
well as interested users, who not only buy the watch, but also actually use it
on a daily basis (me included ;)
Were there some "show stoppers" where you thought "wow, this one's really tough,
not sure we can carry on" ?
JF: Since the beginning, we (the PineTime community) want the whole PineTime project to be as open and as inclusive as possible, meaning that there would probably be more than one firmware available, and we wanted the users to be able to easily and safely install the firmware of their choice.
This goal is rather easy to reach on higher-level platforms like a computer, or
a Linux phone like the Pinephone as there are standardised bootloaders (BIOS,
EFI), or they are equipped with removable storage.
On an embedded platform
like the PineTime, you don't have all these functionalities that make the
"installation" of a firmware easy: the firmware has to initialize the whole CPU,
setup the interrupt vector, configure the peripherals and devices,... and there
is no standardised hardware abstraction layer between the software and the
hardware.
The problem is that every developer wants to use the language, platform,
framework, RTOS, libraries, stacks,... they want. They don't want to be "forced"
to use a specific BLE stack because that's the only one supported by the
bootloader, for example.
That's when we were thinking about the bootloader and the OTA procedure : what
would be the responsabilities of the bootloader? Should it include the BLE stack
to provide the OTA functionality? Or should it only take care of the update of
the firmware, leaving the responsability of the download of the firmware over
BLE to the application?
We also had to think about a specific memory map every developer would have to agree,...
There were a lot of discussions, brainstorming, thinking and sometimes
arguments. I can't thank Lup Yuen enough for his work on this part of the
project : he spent a lot of time
documenting
his vision on the bootloader, how it works, how the memory could be segmented
and of course,
building the very first open source bootloader for the PineTime, based on
MCUBoot.
We still use this bootloader to this day, and even the new version I'm
working on is still based on his original work!
Nico: Again, looking back at all the releases delivered, can you tell us what you're the most proud of, and why?
JF: I'm very proud I managed to build this project from scratch, from a
simple "Hello world" to a nearly fully functional application firmware for a
smartwatch I can use every day.
I'm also proud that InfiniTime was chosen as the
first FOSS firmware to be flashed at factory on the PineTime.
But what I'm most proud of is the fact that InfiniTime has become a community
project : I'm not the only one to work on the code anymore.
More and more users
and developers are actively working on the project : reporting issue, suggesting
features and improvements, reviewing code, adding features, fixing bugs, helping with the
project "administration", and also helping other users and newcomers,
communicating
about it on social medias and even help building a whole ecosystem around the
PineTime (companion apps for Linux and Android, tools, scripts, watchface
projects, forks of InfiniTime,...).
The Future
Nico: I know it's always tough to try predicting the future, but let's pretend
we have a crystal ball - where do you think the project will be by the end of
2021?
I mean, you and I were discussing FOSDEM 2022, and how cool it would be to
showcase PineTime - I'm curious and would like your take - what do you think
we'll show to the crowd in Brussels?
JF: I would like to write a roadmap to InfiniTime 1.0.0 and try to achieve it in the next 6-9 months, and I really hope we'll be able to meet in person at FOSDEM 2022 and to showcase the PineTime along with other products from Pine64 !
Tags: PineTime