Hello,

like suggested earlier in the original discussion I would suggest to prioritize our development goals for libbsd and later evaluate the two problems discussed in the thread based on this. Let's first agree on development goals (that also can be added to the libbsd documentation). From the thread and responses, I currently have collected the following goals / priorities. I replaced my original extensibility and debuggability with Joels transparency because it's a good summary term for these two points.

From highest to lowest priority:

- Maintainability: How easy is it for the people doing the main maintenance tasks to do that work.

- Transparency: How easy it is to understand the code? Relevant for extending and debugging.

- Code and RAM sizes (or other hardware requirements): Whether we meet the minimum hardware requirements.

- Modularity: How well and easy the system can be adapted to target applications. Have only few official ways to enable / disable modules in the subsystem.

- Real time capabilities: No hard real time requirements for libbsd core but we have to make sure that it doesn't have a negative impact on other subsystems.

- Performance: Whether libbsd performes well enough in the typical use cases.

That means (for example): If it makes the system more maintainable, the performance isn't that important. If it reduces the size, we can trade off some performance or real time capabilities.

Would you prioritize different? Did I miss some additional points from the discussion?

Best regards

Christian

On 2023-01-20 08:32, Christian MAUDERER wrote:
Hello,

recently an internal discussion about updates in the libbsd started. All who participated in the discussion agreed that we should move the discussion to a public one. Below you can find the mail thread. It's oldest mail first. Mails are split with lines of = signs. I removed some duplicated mail text in case there were no inline comments. The date/time of the mails are in my current locale which is UTC+1.

Best regards

Christian

=====================================================================
On 2023-01-03 16:52, Thomas DOERFLER wrote:
Hello,

first of all I wish you all a healthy, happy and successful new year.

Unfortunately I already have to re-raise an issue: One of our customers
has asked us about the RTEMS libbsd update policy. Since we still use a
rather old libbsd version, it contains "OpenSSL 1.1.1d-freebsd  10 Sep
2019", there are many openSSL fixes missing when using RTEMS, and this
most likely is true for other parts of libbsd.

IMHO we should find a way to overcome the current libbsd update blocking
points and try to stay close to the FreeBSD code (maybe in a 1-3 month
interval).

AFAIK the big blocking point are the different views around changes of
the file descriptor handling between RTEMS and BSD (this may be a bit
off the real topic, I am not yet into the details). In the next week I
would like to get things rolling to see the pros and cons of both
possible implementations and I would be happy if those closely involved
would support this.

Apart from the current blocking point, can we agree that staying close
the the FreeBSD code (with a 1-3 month update/sync interval) would be
desirable?

Kind regards to you all,

Thomas.


=====================================================================
On 2023-01-12 01:24, Gedare Bloom wrote:
Hi Thomas,

I think the goal you have stated is laudable and fits with the initial
design goals of libbsd. I will take a closer look at this topic and
report back soon, I hope. I have remained (purposefully) ignorant
about libbsd evolution over time, but I guess it is time for me to
learn a bit more and catch up.

 From what I have understood about the current blocking issue, it has
to do with the changes that were made to use FreeBSD File Descriptors
and the VFS. However, one of the main problems that was noted actually
appears to be just related to the size increase caused by the syscall
glue implemented in a single .c file. So, I will plan to start my
libbsd learning adventure by trying to split that .c file apart into
separate build components to see how/if that alleviates the linked
image size. If successful, that should get us closer.

I think we can then revisit whether or not the FreeBSD File
Descriptors themselves are in fact problematic.

It would also be helpful to decide if we want to clarify any
requirements for libbsd maintenance. So, for example, the ability to
keep it updated on a rolling basis would require good automation and
validation that changes/updates remain usable. It would appear that
there are some minimum resource requirements that some users of libbsd
would like to remain under if possible. To ensure that would require
establishing what platform(s) have resource requirements for using
libbsd, and adding configurations/testing to check for when those
resources are exceeded by an update. Because it is entirely plausible
that an update pulls in changes from upstream that causes the
resources to grow.

Gedare

=====================================================================
On 2023-01-12 08:46, Sebastian Huber wrote:
Hello Gedare,

On 12.01.23 01:24, Gedare Bloom wrote:
Hi Thomas,

I think the goal you have stated is laudable and fits with the initial
design goals of libbsd. I will take a closer look at this topic and
report back soon, I hope. I have remained (purposefully) ignorant
about libbsd evolution over time, but I guess it is time for me to
learn a bit more and catch up.

yes, one of the goals of libbsd was to follow the FreeBSD upstream,
however, I was the only one doing this work in the past and I was busy
with other things in the last three years (mainly the RTEMS
pre-qualification). We need a more automated way to keep libbsd up to
date. My proposal is to focus on the master branch since the FreeBSD EOL
is 31. December 2023. We could use FreeBSD 14 for the next production
branch. The current libbsd synchronization support was designed to do
updates from Subversion. With Git we can do things more efficiently. I
would replace the libbsd build system with the one from RTEMS (waf +
spec items). With the spec items we can more easily read the data in
other scripts. For continuous and automatic updates I would do the
following:

1. Check out the FreeBSD X branch.

2. Move all FreeBSD top-level directories under the new "freebsd"
directory and merge in all updates from FreeBSD.

3. Gather the set of files imported from FreeBSD. Name the set F.

4. Pick a start FreeBSD commit C.

5. Make a patch from C to C + 1 for the file set F.

6. Cherry pick the patch to the associated libbsd branch, if this fails,
send a message and stop.

7. Build libbsd for the reference BSP, if this fails, send a message and
stop.

8. Run the tests for the reference BSP, if this fails, send a message
and stop.

9. Set C to C + 1, go to 5.

Update problems can be more easily fixed if you just have a single
commit. This approach makes it easier to fix things directly in FreeBSD
and then get the fixes automatically into libbsd. Individual commits
make it possible to use git bisect.

I already started to work on this.

https://github.com/sebhub/rtems-libbsd/tree/master-update

I updated the FreeBSD baseline from 2019-09-24 to 2020-02-09 (again no
issues with the system calls). The problem areas during updates are UMA,
sleep queues, callouts, and the introduction of SMP optimizations
through per-processor data structures. I added the ntpd support and
started with the integration of the VFS/NFS support. This was not easy
since FreeBSD was quite active in these five months and touch a lot of
code in the VFS/NFS area.

All the embedded brains contributions are in the 6-freebsd-12 and the
master branch. This is not the case for other contributions. If I
proceed with the update of the master branch moving this stuff from the
6-freebsd-12 branch to master will get more difficult.


 From what I have understood about the current blocking issue, it has
to do with the changes that were made to use FreeBSD File Descriptors
and the VFS. However, one of the main problems that was noted actually
appears to be just related to the size increase caused by the syscall
glue implemented in a single .c file. So, I will plan to start my
libbsd learning adventure by trying to split that .c file apart into
separate build components to see how/if that alleviates the linked
image size. If successful, that should get us closer.

I have two issues:

1. The system calls in a single RTEMS-specific file.

2. The use of FreeBSD file descriptors.

Both issues are fixed by the patch set. I don't see a benefit in
splitting the RTEMS-specific file into one file per system call. The
original approach is still the best approach. I don't know why it was
changed without a discussion on the RTEMS mailing list. It worked for
years, it allows compiler optimizations, it is easy to review, and there
are no issues during updates.

I updated the patch set so that it doesn't require changes in RTEMS:

https://github.com/sebhub/rtems-libbsd/tree/filedesc


I think we can then revisit whether or not the FreeBSD File
Descriptors themselves are in fact problematic.

File descriptors on top of file descriptors make little sense. Also
FreeBSD has some implementation overheads which are unnecessary in the
RTEMS context in which the maximum file descriptor count is fixed at
link time.


It would also be helpful to decide if we want to clarify any
requirements for libbsd maintenance. So, for example, the ability to
keep it updated on a rolling basis would require good automation and
validation that changes/updates remain usable. It would appear that
there are some minimum resource requirements that some users of libbsd
would like to remain under if possible. To ensure that would require
establishing what platform(s) have resource requirements for using
libbsd, and adding configurations/testing to check for when those
resources are exceeded by an update. Because it is entirely plausible
that an update pulls in changes from upstream that causes the
resources to grow.

Yes, it is possible that changes in FreeBSD lead to a higher resource
usage and it would be good to have tests which catch this. However, the
current problems were not caused by FreeBSD changes. The really big
issue is that we didn't manage to integrate FreeBSD changes in the last
three years.


=====================================================================
On 2023-01-12 19:12, Gedare Bloom wrote:
On Thu, Jan 12, 2023 at 12:46 AM Sebastian Huber
<sebastian.hu...@embedded-brains.de> wrote:

Hello Gedare,

On 12.01.23 01:24, Gedare Bloom wrote:
Hi Thomas,

I think the goal you have stated is laudable and fits with the initial
design goals of libbsd. I will take a closer look at this topic and
report back soon, I hope. I have remained (purposefully) ignorant
about libbsd evolution over time, but I guess it is time for me to
learn a bit more and catch up.

yes, one of the goals of libbsd was to follow the FreeBSD upstream,
however, I was the only one doing this work in the past and I was busy
with other things in the last three years (mainly the RTEMS
pre-qualification). We need a more automated way to keep libbsd up to
date. My proposal is to focus on the master branch since the FreeBSD EOL
is 31. December 2023. We could use FreeBSD 14 for the next production
branch. The current libbsd synchronization support was designed to do
updates from Subversion. With Git we can do things more efficiently. I
would replace the libbsd build system with the one from RTEMS (waf +
spec items). With the spec items we can more easily read the data in
other scripts. For continuous and automatic updates I would do the
following:

1. Check out the FreeBSD X branch.

2. Move all FreeBSD top-level directories under the new "freebsd"
directory and merge in all updates from FreeBSD.

3. Gather the set of files imported from FreeBSD. Name the set F.

4. Pick a start FreeBSD commit C.

5. Make a patch from C to C + 1 for the file set F.

6. Cherry pick the patch to the associated libbsd branch, if this fails,
send a message and stop.

7. Build libbsd for the reference BSP, if this fails, send a message and
stop.

8. Run the tests for the reference BSP, if this fails, send a message
and stop.

9. Set C to C + 1, go to 5.

Update problems can be more easily fixed if you just have a single
commit. This approach makes it easier to fix things directly in FreeBSD
and then get the fixes automatically into libbsd. Individual commits
make it possible to use git bisect.

I already started to work on this.

https://github.com/sebhub/rtems-libbsd/tree/master-update

Thanks for that description. It makes sense, and I think this is a
good direction for us to be heading. However, we do have to resolve
the "fork" that currently exists between master and 6-freebsd-12.

I updated the FreeBSD baseline from 2019-09-24 to 2020-02-09 (again no
issues with the system calls). The problem areas during updates are UMA,
sleep queues, callouts, and the introduction of SMP optimizations
through per-processor data structures. I added the ntpd support and
started with the integration of the VFS/NFS support. This was not easy
since FreeBSD was quite active in these five months and touch a lot of
code in the VFS/NFS area.

All the embedded brains contributions are in the 6-freebsd-12 and the
master branch. This is not the case for other contributions. If I
proceed with the update of the master branch moving this stuff from the
6-freebsd-12 branch to master will get more difficult.

Yes, we need to resolve this issue. Thank you for having patience so
far with it. I have not been able to put much thought or energy to it
before now.


  From what I have understood about the current blocking issue, it has
to do with the changes that were made to use FreeBSD File Descriptors
and the VFS. However, one of the main problems that was noted actually
appears to be just related to the size increase caused by the syscall
glue implemented in a single .c file. So, I will plan to start my
libbsd learning adventure by trying to split that .c file apart into
separate build components to see how/if that alleviates the linked
image size. If successful, that should get us closer.

I have two issues:

1. The system calls in a single RTEMS-specific file.

2. The use of FreeBSD file descriptors.

Both issues are fixed by the patch set. I don't see a benefit in
splitting the RTEMS-specific file into one file per system call. The
original approach is still the best approach. I don't know why it was

It looks to me like it is reverted rather than fixed. Since Chris
apparently found it necessary to change, it is best if we can resolve
the difference between what he needed and what you need. Simply
returning back to the prior state is not respectful to him. Similarly,
to be respectful to you, we should understand the pros/cons of each
approach and try to resolve them. I am willing to do some of this work
on a voluntary (unpaid) basis to help the community move forward, but
I suspect it will eventually require compromise (and code) from both
of you.

 From what I have seen, the reason that the syscalls were consolidated
was to make it easier to work across related syscalls. Maintainability
is decided by the *next* person to work on the code. It looks to me
like it is considerably easier to find the RTEMS syscall layer in the
consolidated approach, and to work across layers.

There is also a performance benefit to allow the compiler to optimize
the syscall away, but that also impacts debuggability if our syscall
layer disappears. The tradeoffs between maintainability and
debuggability vs performance appear to be fairly complicated in this
space. There's not a great description to me yet of what is required
for performance, while the documentation of libbsd has mostly favored
maintainability as a primary objective. So I think that any argument
to do something for performance reasons has to be accompanied by clear
evidence that the performance improvement matters.

changed without a discussion on the RTEMS mailing list. It worked for
years, it allows compiler optimizations, it is easy to review, and there
are no issues during updates.

I think the change was announced:
https://lists.rtems.org/pipermail/devel/2021-July/068573.html

This is just another outcome of our current way of handling change
management. Changes can easily be lost in the email exchange.

I updated the patch set so that it doesn't require changes in RTEMS:

https://github.com/sebhub/rtems-libbsd/tree/filedesc


I think we can then revisit whether or not the FreeBSD File
Descriptors themselves are in fact problematic.

File descriptors on top of file descriptors make little sense. Also
FreeBSD has some implementation overheads which are unnecessary in the
RTEMS context in which the maximum file descriptor count is fixed at
link time.


Are there any performance analyses that quantify the impact of the
implementation overhead of FreeBSD File Descriptors? Again, this is
about the tradeoff between maintainability and performance. i can't
make value judgments about performance without understanding the
resource constraints of the target platforms, and the performance
metrics (code size, heap size, throughput?) that are used to decide if
an optimization is worth sacrificing maintainability. It has always
been my understanding that the libbsd strives for maintainability
first and foremost. So to unilaterally reject code changes that reduce
the maintenance burden (by keeping us closer to the vanilla FreeBSD
code base) in the name of performance requires two things:
1. Evidence that the performance improvement is substantial.
2. Argument that the implementation of the performance improvement is
the most maintainable way to achieve it.

So far, I haven't seen either of these with respect to the runtime
overheads. And I haven't seen a good argument that injecting the
syscall implementations into FreeBSD is better than having them live
separately in the rtemsbsd layer.


=====================================================================
On 2023-01-13 08:26, Sebastian Huber wrote:
On 12.01.23 19:12, Gedare Bloom wrote:
I have two issues:

1. The system calls in a single RTEMS-specific file.

2. The use of FreeBSD file descriptors.

Both issues are fixed by the patch set. I don't see a benefit in
splitting the RTEMS-specific file into one file per system call. The
original approach is still the best approach. I don't know why it was
It looks to me like it is reverted rather than fixed. Since Chris
apparently found it necessary to change, it is best if we can resolve
the difference between what he needed and what you need. Simply
returning back to the prior state is not respectful to him. Similarly,
to be respectful to you, we should understand the pros/cons of each
approach and try to resolve them. I am willing to do some of this work
on a voluntary (unpaid) basis to help the community move forward, but
I suspect it will eventually require compromise (and code) from both
of you.

I would not have looked into that if I had not experienced two problems:

1. The ntpd crashed somewhere in the area of file descriptors. I tried
to debug this, but the code is too complex compared to just using the
RTEMS file descriptors. This is why I removed the FreeBSD file
descriptors.

2. I updated a project using the old network stack and libusb to just
use libbsd. Here I have a RAM limitation of 16MiB. Wasting at least 4MiB
for unused stuff is not that great. This lead to the system call
aggregation issue.


 From what I have seen, the reason that the syscalls were consolidated
was to make it easier to work across related syscalls.

What do you mean with "work across related syscalls"? For example, the
socket related system call implementations are in uipc_syscalls.c. Here
we had:

#ifdef __rtems__
static
#endif /* __rtems__ */
int
sys_sendto(struct thread *td, struct sendto_args *uap)
{
     struct msghdr msg;
     struct iovec aiov;

     msg.msg_name = __DECONST(void *, uap->to);
     msg.msg_namelen = uap->tolen;
     msg.msg_iov = &aiov;
     msg.msg_iovlen = 1;
     msg.msg_control = 0;
#ifdef COMPAT_OLDSOCK
     if (SV_PROC_FLAG(td->td_proc, SV_AOUT))
         msg.msg_flags = 0;
#endif
     aiov.iov_base = __DECONST(void *, uap->buf);
     aiov.iov_len = uap->len;
     return (sendit(td, uap->s, &msg, uap->flags));
}
#ifdef __rtems__
ssize_t
sendto(int socket, const void *message, size_t length, int flags,
     const struct sockaddr *dest_addr, socklen_t dest_len)
{
     struct thread *td = rtems_bsd_get_curthread_or_null();
     struct sendto_args ua = {
         .s = socket,
         .buf = (caddr_t) message,
         .len = length,
         .flags = flags,
         .to = dest_addr,
         .tolen = dest_len
     };
     int error;

     if (td != NULL) {
         error = sys_sendto(td, &ua);
     } else {
         error = ENOMEM;
     }

     if (error == 0) {
         return td->td_retval[0];
     } else {
         rtems_set_errno_and_return_minus_one(error);
     }
}
[...]
#endif /* __rtems__ */

The sys_sendto() is unmodified and the RTEMS adoption is below the
implementation. This is easy to review and understand. Everything is in
one place. There are no issues during updates and I know what I am
talking about:

git log ./freebsd/sys/kern/uipc_syscalls.c | grep 'Update to F'
     Update to FreeBSD stable/12 2019-09-23
     Update to FreeBSD stable/12 2019-02-11
     Update to FreeBSD stable/12 2019-01-16
     Update to FreeBSD head 2018-11-15
     Update to FreeBSD head 2018-09-17
     Update to FreeBSD head 2018-06-01
     Update to FreeBSD head 2018-04-01
     Update to FreeBSD head 2017-12-01
     Update to FreeBSD head 2017-08-01
     Update to FreeBSD head 2017-04-04
     Update to FreeBSD head 2016-12-10
     Update to FreeBSD head 2016-08-23
     Update to FreeBSD 9.3
     Update to FreeBSD 9.2
     Update to FreeBSD 8.4

In general, the system call related area is not an issue during updates
since the system call interface is pretty stable. System call stability
is a very important thing for FreeBSD/Linux/etc.

Maintainability
is decided by the*next*  person to work on the code.

So far I am the only one who expressed plans to synchronize libbsd with
the upstream FreeBSD development.

It looks to me
like it is considerably easier to find the RTEMS syscall layer in the
consolidated approach, and to work across layers.

Moving things to a separate file instead of having it directly under the
implementation function is considerably easier to find?


There is also a performance benefit to allow the compiler to optimize
the syscall away, but that also impacts debuggability if our syscall
layer disappears.

If you want to debug you have to reduce the optimization level anyway.
You can use for example -fno-inline.

The tradeoffs between maintainability and
debuggability vs performance appear to be fairly complicated in this
space. There's not a great description to me yet of what is required
for performance, while the documentation of libbsd has mostly favored
maintainability as a primary objective. So I think that any argument
to do something for performance reasons has to be accompanied by clear
evidence that the performance improvement matters.

Talking about maintainability here sounds fairly abstract to me. This
should be underlined with concrete examples. In the master branch there
is no kern_descrip.c which is a 4k LOC source file. I don't know how
adding this file improves maintainability. The VFS/NFS support works
without the FreeBSD file descriptors.


changed without a discussion on the RTEMS mailing list. It worked for
years, it allows compiler optimizations, it is easy to review, and
there
are no issues during updates.

I think the change was announced:
https://lists.rtems.org/pipermail/devel/2021-July/068573.html

This is just another outcome of our current way of handling change
management. Changes can easily be lost in the email exchange.

Sorry, I didn't notice this e-mail before. In this time frame I was
quite busy with the RTEMS pre-qualification activity and holidays.


I updated the patch set so that it doesn't require changes in RTEMS:

https://github.com/sebhub/rtems-libbsd/tree/filedesc

I think we can then revisit whether or not the FreeBSD File
Descriptors themselves are in fact problematic.
File descriptors on top of file descriptors make little sense. Also
FreeBSD has some implementation overheads which are unnecessary in the
RTEMS context in which the maximum file descriptor count is fixed at
link time.

Are there any performance analyses that quantify the impact of the
implementation overhead of FreeBSD File Descriptors? Again, this is
about the tradeoff between maintainability and performance. i can't
make value judgments about performance without understanding the
resource constraints of the target platforms, and the performance
metrics (code size, heap size, throughput?) that are used to decide if
an optimization is worth sacrificing maintainability. It has always
been my understanding that the libbsd strives for maintainability
first and foremost. So to unilaterally reject code changes that reduce
the maintenance burden (by keeping us closer to the vanilla FreeBSD
code base) in the name of performance requires two things:
1. Evidence that the performance improvement is substantial.
2. Argument that the implementation of the performance improvement is
the most maintainable way to achieve it.

So far, I haven't seen either of these with respect to the runtime
overheads. And I haven't seen a good argument that injecting the
syscall implementations into FreeBSD is better than having them live
separately in the rtemsbsd layer.

If you are interested I suggest to build libbsd for the
arm/xilinx_zynq_a9_qemu BSP with optimization disabled. Then step
through a socket send/receive system call on the master and 6-freebsd-12
branch and in particular getsock_cap().


=====================================================================
On 2023-01-16 14:30, Christian MAUDERER wrote:
Hello,

I think we have a bit of a new situation here: There are two approaches
to a problem, and it seems that no consent can be found with the usual
discussions. May I suggest that we try a more top-down approach: Let's
agree what are the important points that we want to reach and then try
to evaluate the problem based on these?

What I have seen in the discussions, the following points should be
evaluated:

- Maintainability: Who does the main maintenance work and how easy is it
for them to do that work?

- Extensibility: Who works with the code and how easy is it for them to
contribute?

- Debuggability: How easy is it to debug / understand a problem and the
related code?

- Code and RAM sizes (or other hardware requirements): What are the
minimum requirements and do we meet them?

- Performance: Which are our use cases and does it perform well enough
in these?

- Real time capabilities: Does the subsystem have any real time
requirements?

These could be valid for basically any part of RTEMS (so that list could
be useful for further similar problems). We should try to find out where
our focus for libbsd is. For example, I think that real time capability
was never important for libbsd.

Where do you see the focus for libbsd? Please feel free to add further
points and rate the ones above.


Based on what we agree as most important points, we then should analyze
the suggested solutions. From my point of view, we have at least three
mostly independent parts in this discussion:

- Updated NFS support. I think it's clear that the target for all of us
is that it works.

- Libbsd file descriptors: Chris imported them to the 6-freebsd-12
branch when adding the NFS support. Sebastian wants to get rid of them
again.

- Collected system calls: Different opinions where the system calls
should be located.

Did I miss a fourth part of the problem?

Please note: Of course I'm biased because I talk a lot more with
Sebastian than with Chris. Despite that I'll try to be as objective as
possible in this discussion.

Best regards

Christian


=====================================================================
On 2023-01-16 17:33, Thomas DOERFLER wrote:
Hello,

just my two cents regarding real time capability:

The point should not only consider, whether a certain subsystem has real
time requirements, but also whether a certain patch/solution influences
the real time capabilities of RTEMS as a whole.

wkr,

Thomas.

=====================================================================
On 2023-01-16 17:55, Joel Sherrill wrote:


On Mon, Jan 16, 2023 at 10:33 AM Thomas DOERFLER
<thomas.doerf...@embedded-brains.de
<mailto:thomas.doerf...@embedded-brains.de>> wrote:

    Hello,

    just my two cents regarding real time capability:

    The point should not only consider, whether a certain subsystem has
    real
    time requirements, but also whether a certain patch/solution
influences
    the real time capabilities of RTEMS as a whole.


libbsd made us realize that source transparency and compatibility is
a big
factor and must be considered any time we import/reuse third party code.
libbsd is a huge amount of code and it is of paramount importance to
minimize changes and RTEMS special code. Doing so increases the
maintenance burden and adds risk of introducing incompatibility with
FreeBSD.

If something from FreeBSD cannot be supported on RTEMS or (in this
case) is too large for some desired targets, then a way must be found to
make the FreeBSD import leaner. Perhaps a configuration option to avoid
some memory allocations. Or a configuration option to disable the part of
the code in question that pulls in what is not needed for the specific
application and target in question.

The RTEMS way is to make features optional and drop out cleanly.
We do not have a history of hacking up ported package.

libbsd's first order goal is source transparency to ease updates,
maintenance, and avoid introducing bugs/incompatibilities.

I have trouble believing that this is about performance and we don't
make real-time claims about libbsd because that would mean FreeBSD
made those claims and they don't. It is about functionality and
compatibility. I'm sure FreeBSD has made their implementation as
performant as possible but without a worry about memory consumption.

The unnecessary code for this specific application/target needs to be
identified and simply configured out.

Transparency and compatibility override any other considerations or
options.

--joel
.


=====================================================================
On 2023-01-17 11:38, Christian MAUDERER wrote:
Hello Joel,

Am 16.01.23 um 17:55 schrieb Joel Sherrill:


On Mon, Jan 16, 2023 at 10:33 AM Thomas DOERFLER
<thomas.doerf...@embedded-brains.de
<mailto:thomas.doerf...@embedded-brains.de>> wrote:

    Hello,

    just my two cents regarding real time capability:

    The point should not only consider, whether a certain subsystem has
    real
    time requirements, but also whether a certain patch/solution
influences
    the real time capabilities of RTEMS as a whole.


libbsd made us realize that source transparency and compatibility is a
big
factor and must be considered any time we import/reuse third party code.
libbsd is a huge amount of code and it is of paramount importance to
minimize changes and RTEMS special code. Doing so increases the
maintenance burden and adds risk of introducing incompatibility with
FreeBSD.

If something from FreeBSD cannot be supported on RTEMS or (in this
case) is too large for some desired targets, then a way must be found to
make the FreeBSD import leaner. Perhaps a configuration option to avoid
some memory allocations. Or a configuration option to disable the
part of
the code in question that pulls in what is not needed for the specific
application and target in question.

The RTEMS way is to make features optional and drop out cleanly.
We do not have a history of hacking up ported package.

libbsd's first order goal is source transparency to ease updates,
maintenance, and avoid introducing bugs/incompatibilities.

I have trouble believing that this is about performance and we don't
make real-time claims about libbsd because that would mean FreeBSD
made those claims and they don't. It is about functionality and
compatibility. I'm sure FreeBSD has made their implementation as
performant as possible but without a worry about memory consumption.

The unnecessary code for this specific application/target needs to be
identified and simply configured out.

Transparency and compatibility override any other considerations or
options.

Is the transparency and compatibility a new point? From how I read your
text it is mostly part of maintainability and debugability as well as a
bit extensibility that I mentioned in my list earlier.

Beneath that you added a point to the list that is related but not the
same as code and RAM size:

- Modularity: How well and easy the system can be adapted to target
applications. Additionally: What is the official way to enable / disable
modules in the subsystem.

Best regards

Christian


=====================================================================

After this mail it has been suggested to continue the discussion on devel and all agreed that the mails can be re-posted.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

--
--------------------------------------------
embedded brains GmbH
Herr Christian MAUDERER
Dornierstr. 4
82178 Puchheim
Germany
email:  christian.maude...@embedded-brains.de
phone:  +49-89-18 94 741 - 18
mobile: +49-176-152 206 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to