RFC: BSD Socket (like) API

Paul Sokolovsky


Support for BSD Sockets API in Zephyr is one of the frequently asked
features from different parties. Possibility of such support was a topic
of discussions at the recent OpenIoT Summit Portland and Zephyr
Mini-summit Budapest. I'm happy to report that I didn't hear a single
"cons" vote, most people I heard or talked with were positive that they
either interested in it themselves, or it least OK with it if it's
properly layered and doesn't bloat existing networking API.

So, based on that, Linaro Zephyr team would like to proceed with
bootstrapping work on this, collecting initial requirements, and
starting prototyping. I submitted a Jira Epic
https://jira.zephyrproject.org/browse/ZEP-1921 for this feature, which
has a detailed, even if maybe somewhat unstructured discussion of
initial ideas/requirements.

I won't paste it here, instead inviting interested parties to read it
there. Instead, here's a summary of the initial ideas:

1. There's no talk about implementing complete 100% (or 99.9%) POSIX
compliant sockets API. We may get there eventually, but that would
require stakeholders for each expensive or hard to implement feature.
The current approach is that we value lightweight nature of Zephyr, and
looking towards finding a minimal set of changes (additions) to provide
BSD Sockets *like* API to Zephyr.

2. The specific featureset of the initial interest is as follows. The
current Z networking API is push-based, where the OS pushes data into
an application (via a callback). Whereas BSD Sockets API is pull-based,
where an application asks OS for new data to process, when an
application feels like. Implementing this pull-style API is the
initial focus of the effort.

3. The work is going to be guided by porting efforts of an actual
application which needs BSD Sockets API (MicroPython). That would serve
as an initial (out-of-tree) prototype, with relevant code to be
optimized and merged in-tree for wider reuse.

Consequently, questions to the Zephyr community:

1. Are you interested in BSD Sockets like API?
2. Does the plan above sound good? Any important points to take
care of right from the beginning?
3. Or would you do something differently?
4. Any other feedback is appreciated.


Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linaro
http://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog

Join devel@lists.zephyrproject.org to automatically receive all group messages.