Hello world :-)

As we have fist PR [1] with package manager for NuttX by @aviralgarg05
and this is step towards NuttX RT-OS "distribution" lets talk about
its architecture :-)

First of all I would like to propose starting from creating
architecture document and then proceed with implementation so we have
clear vision on the road ahead :-) This documentation should be easy
to edit, thus we may use ASF Confluence WIKI?

As as BSD user I will for sure give FreeBSD as an example because this
is what I found really elegant and future-proof :-)

Term "distribution" comes from the Linux world and is not well
perceived in the BSD world where FreeBSD or OpenBSD or NetBSD are not
"distributions" but fully featured standalone and complete operating
systems. I would love NuttX to be that way too - that we have NuttX as
one common coherent environment and not many "distributions" competing
with each other. Thus my proposition to stick to the BSD approach and
thus naming like NuttX RT-OS that would resemble RTOS but also
complete coherent and standalonde OS solution.

Below are my remarks I already put on the PR.

Regarding RT-OS organization:
* BSD systems are divided into BASE and USERLAND. This may come handy
for NuttX too because BASE could be the static firmware images built
for specific platform, and then USEDLAND would provide packages for
that platform. This clear separation assures clean and elegant
implementations.
  * BASE is located in `/`.
  * USERLAND is mounted at `/usr/local` when BASE is ready.
  * BASE can work without USERLAND.
  * BASE is common to all releases and platforms providing minimal
common feature set.
  * This allows to have static BASE at `/` with USERLAND mounted from
anywhere (i.e. network or separate partition) at `/usr/local`.
  * Breaking USERLAND never breaks BASE, so you can easily fix stuff
when in pinch.
  * This BSD is different approach from Linux where is base and
packages are intermixed, and I would love this approach in NuttX RT-OS
:-)

Regarding NXPKG:
* I would suggest FreeBSD following `pkg` [2] organization which is
similar in name and functionality (also smaller and simpler than
`apt`, `pacman`, etc). We may use `nxpkg` in place of `pkg` below:
  * Configuration is plaintext at `/etc/pkg/` and then `nuttx.conf`.
  * Package database is in `/var/db/pkg/local.sqlite`.
  * Package cache is in `/var/cache/pkg`.
  * Each package knows its dependency packages, and pkg is able to solve them.
  * There are also "package flavors" that is each package can have
different feature set enabled/disabled, but this is story for future
here, we just need to keep it in mind when designing architecture.
Lets start with small measurable steps.

This way we would stick to the current approach where BASE is just
custom firmware, while enabling NXPKG would enable USERLAND (or vice
versa).

If we want NuttX RT-OS then we should consider minimal and common set
of functionalities for BASE.

Let me know what you think :-)
Tomek

[1] https://github.com/apache/nuttx-apps/pull/3474
[2] https://man.freebsd.org/cgi/man.cgi?query=pkg

--
CeDeROM, SQ7MHZ, http://www.tomek.cedro.info

Reply via email to