Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

README.md: improve feature list #21059

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

kfessel
Copy link
Contributor

@kfessel kfessel commented Dec 2, 2024

Contribution description

Inspired by comments in #21052 especially #21052 (comment) this tries to improve Riots Feature List

Testing procedure

read kfessel:p-improve-feature-list

Issues/PRs references

#21052
at the same time ( for future reference)
#21061
#21063

@kfessel kfessel requested a review from jia200x as a code owner December 2, 2024 12:18
@github-actions github-actions bot added the Area: doc Area: Documentation label Dec 2, 2024
@kfessel kfessel force-pushed the p-improve-feature-list branch from 9d62e4f to 4e8a001 Compare December 2, 2024 13:20
@kfessel kfessel requested a review from maribu December 3, 2024 11:18
@maribu maribu added the Process: needs >1 ACK Integration Process: This PR requires more than one ACK label Dec 4, 2024
@github-actions github-actions bot added the Process: missing approvals Integration Process: PR needs more ACKS (handled by action) label Dec 4, 2024
Copy link
Member

@maribu maribu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me, thanks for picking this up!

README.md Outdated Show resolved Hide resolved
Copy link
Contributor Author

@kfessel kfessel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove the incompletness indicating ...

we do not claim completeness -> incompleteness is assumed (as ussual with such lists)

README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
@kfessel kfessel force-pushed the p-improve-feature-list branch from 2bc5d86 to b1a1a9f Compare December 4, 2024 10:08
@github-actions github-actions bot added Area: tests Area: tests and testing framework Area: core Area: RIOT kernel. Handle PRs marked with this with care! Area: build system Area: Build system Area: drivers Area: Device drivers Area: tools Area: Supplementary tools Area: boards Area: Board ports Area: SAUL Area: Sensor/Actuator Uber Layer labels Dec 4, 2024
@kfessel kfessel force-pushed the p-improve-feature-list branch from b1a1a9f to 570f97b Compare December 4, 2024 10:09
@github-actions github-actions bot removed Area: tests Area: tests and testing framework Area: core Area: RIOT kernel. Handle PRs marked with this with care! Area: build system Area: Build system Area: drivers Area: Device drivers Area: tools Area: Supplementary tools Area: boards Area: Board ports Area: SAUL Area: Sensor/Actuator Uber Layer labels Dec 4, 2024

* Security Features
- OTA updates via SUIT
- PSA Cryptographic API
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am all in to show the PSA here, but the module still says "This implementation is not complete and not yet thoroughly tested. Please do not use this module in production, as it may introduce security issues."
Maybe it's time to drop that warning, if we feel comfortable to showcase it in the readme? /cc @Einhornhool @mguetschow

@kfessel
Copy link
Contributor Author

kfessel commented Dec 4, 2024

FYI: I am very ok with removing from and adding features to the lists

- DTLS, EDHOC

* Device Drivers
- SPI, I2C, UART, USB
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CAN should also be mentioned here, maybe also RTC, ADC, DAC

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- SPI, I2C, UART, USB
- SPI, I2C, UART, USB, CAN
- RTC, ADC, DAC, PWM, Timer

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PWM

- Various sensors: Environmental sensors, IMUs, magnetometers, particulate matter sensors
- Various actuators: Servos, motors, dimmers, switches, RGB LEDs
- Displays and touchscreens
- GNSS modules
Copy link
Contributor

@benpicco benpicco Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't have any of those GNSS drivers upstream AFAIK

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't the minmea package sufficient to use GNSS modules?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on the most basic level yes, but then you could also argue that the at module is enough to support an LTE module

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minmea is more like gnss (nema) meassage interpreter without in depth module support so how about:

Suggested change
- GNSS modules
- GNSS

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benpicco How about ⬆️ instead of GNSS modules?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I do get @benpicco's point. When we add GNSS, why not also add basic support. Color me convinced that GNSS is not a strong suit of RIOT and is better not listed on the front page.

- UWB
- CNN-Lite
- LwIP
- Dose (single pair ethernet like networking on serial interface UART)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels a bit strange to mention this and not Ethernet/IEEE 802.15.4/SLIP

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Dose (single pair ethernet like networking on serial interface UART)
- IEEE 802.15.4
- Ethernet (also via USB)
- SLIP (or ethos networking via Serial)
- Dose (single pair ethernet like networking on serial interface UART)

- Dose (single pair ethernet like networking on serial interface UART)

* System Features
- a preemptive, tickless scheduler with priorities
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

with option to do tick-based round-robin scheduling

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- a preemptive, tickless scheduler with priorities
- a preemptive, tickless scheduler with priorities, optional periodic round robin within priorities

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we might need a linebreak here to preserve the orginal line


* Network Features and Protocols
- IPv6
- 6LoWPAN (RFC4944, RFC6282, and RFC6775)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also add RFC7668 here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 6LoWPAN (RFC4944, RFC6282, and RFC6775)
- 6LoWPAN (RFC4944, RFC6282, RFC6775 and RFC7668 )

* Network Features and Protocols
- IPv6
- 6LoWPAN (RFC4944, RFC6282, and RFC6775)
- UDP
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and TCP

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- UDP
- UDP
- TCP

i think there was some session limit(s) (good by and only one ?) -- @maribu had a recent look into

- Integrate dynamic runtimes such as MicroPython, elm (JavaScript), and WASM

* Network Features and Protocols
- IPv6
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and IPv4 via LWIP

Copy link
Contributor Author

@kfessel kfessel Dec 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- IPv6
- IPv6
- IPv4 via LwIP

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just a nit, they usually spell themself lwIP

- UDP
- RPL (storing mode, P2P mode)
- CoAP
- MQTT
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

via paho-mqtt and MQTT-SN

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other application layer protocols (from the top of my head: DNS and DHCPv6)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- MQTT
- MQTT via paho-mqtt and MQTT-SN

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think the dns and dhcp might need another place closer to RPL


* System Features
- a preemptive, tickless scheduler with priorities
- flexible memory management
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which memory management are we referring to here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably the one that does not force you to have a heap available but can use it if you need it -- my guess

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's not add things that we are not sure what they mean ourself 😅

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is, as of now, the 2nd most prominent feature in the list.

I also don't know what is meant by that and I do agree that it should be dropped if nobody can explain it.

But maybe git praise and ask the author first?

Copy link
Contributor Author

@kfessel kfessel Dec 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line was introduced with the README.md 29.12.12 @784ef523900f3b0942c43099f57621b30f6cab73 - it is in it current form the the second oldest line in this file predated only by (due to a typo fix) -- if the git history wasn't manipulated.
Its original author does already know that this question exists.

nur

  • a preemptive, tickless scheduler with priorities
    und
  • IPv6
    sind älter (und nicht leer)

Copy link
Contributor Author

@kfessel kfessel Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if i did not misread tlsf-malloc replaces malloc if that pkg is used, so it has not to used explicitly -- ( the pool needs to be before the first allocation-call happens)

According to the initial paper it has:

  • a lower complexity class O(1) than first fit alloc (O(length of free list)) (I am assuming embedded libc take the easy route and did not check)
  • pooling is also an advantage (more safe) in that the malloc fails (at least that can be handled) rather then letting the heap run into the main stack
  • can work with multiple memory regions ( external memory would just add to the pool)
  • the low complexity class seems neither be achived by allways beeing cpu hungry nor by wasting lots of memory for management or letting it unused

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • the malloc fails (at least that can be handled) rather then letting the heap run into the main stack

that's what any sane malloc implementation would do, tests/sys/malloc will rely on that

  • can work with multiple memory regions

so do newlib/picolibc

I think this is a pretty niche feature, no need to advertise it so prominently

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main reason to add TLSF in the first place was its real-time capability (because of O(1)).

Copy link
Contributor Author

@kfessel kfessel Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's --fail out of mem and not crash the stack-- what any sane malloc implementation would do, tests/sys/malloc will rely on that

I never checked where riot places the main/start stack in relation to the heap and it has a more sane placement than i thought - somehow had the default stackplacement of avrlibc in my head(endless stack and endless heap until they crash): [data bss heap> empty ram <stack] , seems link the isr_stack might be less lucky sometimes but then the _eheap is adjusted.

thank you for that hint.

that only leaves the O(1) thing for tlsf

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think allowing the allocator to be modified is quiet flexible but maybe this is not our feature but one of new/piolib(c)

Suggested change
- flexible memory management

@waehlisch
Copy link
Member

just to ensure that we are all on the same page: we do want a README that is not concise, and we want to present a long list of features in the README before talking about how to get started and get involved with RIOT?

- Rely upon POSIX APIs, user friendly hardware abstractions, and standard embedded Rust interfaces
- Integrate dynamic runtimes such as MicroPython, elm (JavaScript), and WASM

* Network Features and Protocols
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section could also contain LwM2M and CAN

@benpicco
Copy link
Contributor

benpicco commented Dec 5, 2024

I see the problem with sprawling Readme files, but I think this is not the case here yet. Structure helps and this PR improves on that.

Related Projects should be moved further down though.

@kfessel
Copy link
Contributor Author

kfessel commented Dec 5, 2024

Related Projects should be moved further down though.

even though this was kicked off in that "Related Projects"-PR. I would like to keep this topic out of this PR there are other current PR that target this -- so please keep this out

@OlegHahm
Copy link
Member

OlegHahm commented Dec 5, 2024

I see the problem with sprawling Readme files, but I think this is not the case here yet. Structure helps and this PR improves on that.

I already posted that in Matrix but it actually belongs here:
I agree with @waehlisch here: I would keep the README concise rather than comprehensive. If someone is looking for a certain feature they would rather look at the documentation (the README may provide a pointer to this list, though). The README should give the reader an idea about which type of features are supported (as in "These are the kind of features RIOT support"). E.g., I consider it important information that RIOT supports TCP/IP plus some application layer protocols but I wouldn't go much more into the details here.

@OlegHahm
Copy link
Member

OlegHahm commented Dec 5, 2024

And yes, I know that this post somewhat contradicts my previous comments. ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: doc Area: Documentation Process: missing approvals Integration Process: PR needs more ACKS (handled by action) Process: needs >1 ACK Integration Process: This PR requires more than one ACK
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants