[PATCH] implement futimes

Rob Landley rob at landley.net
Sun Nov 22 22:21:03 UTC 2009


On Sunday 22 November 2009 08:14:55 Sergio M. Ammirata, Ph.D. wrote:
> Carmelo,
>
> Not to be disrespectful, but I agree with Rob's assessment. I too have been
> using the uclibc library for more than 5 years and it's releases are few
> and far between compared to many other open source projects.
>
> I have seen at least 3 other branches of uclibc being maintained by other
> people outside the official repositories because of the slow or
> non-existent response from the uclibc developers.
>
> The fact that the nptl branch is still not in the main branch is in my
> opinion a lack of vision from the maintainers of the project. The nptl code
> is needed in order to compile any recent version of VLC for example.
>
> Recently, I spent over 60 hours of work using multiple machines to perform
> simultaneous compilations trying to get the nptl branch working on x386.
> Unfortunately, I had to stop because the solution to the problem was beyond
> my skillset. I am able to do some coding and prepare patches for simple
> things and offered my time to test anything that needed to be tested to no
> avail.

Peter Mazinger once explained to me the difference between the various uClibc 
NPTL implementations and what pieces of each needed to be put together to 
unify it.  Unfortunately, I don't remember the details, and Manuel Nova drove 
Peter away from uClibc development back in 2006 by complaining that the large 
number of commits Peter was making to the mainline -dev repository were 
breaking Manuel's private out-of-tree patches which he refused to commit to 
mainline.

That was the point at which the uClibc development process officially graduated 
to "diseased", if you ask me...

> I also reported an application crash that happens with the 0.9.30.1 and
> newer libc malloc code and that was not there in 0.9.28. I could not find a
> solution for it.

Which target, what .config, what application, how do you reproduce the 
crash...?

If you can reproduce it under my build system (or build with my toolchain), 
I'll debug it and fix it (in my de-facto fork, grumble):

  http://impactlinux.com/code/firmware/dowloads

I've already had to dig into the malloc code and fix stuff that nobody EVER 
TESTED:

  http://landley.net/notes-2008.html#27-10-2008

> The developers of the app swear that it is a bug in the
> ulibc libraries and the uclibc developers say those types of changes of
> behavior and normal and expected and that it is the application doing
> something wrong (even though it is exactly the same application source code
> in both cases).
>
> My point is, has the target user of the uclibc changed since its
> conception?
>
> Are you guys only focusing on big companies that develop embedded devices?

I'm not.  I'm focusing on any developers who wants to play with non-x86 
targets under qemu, whether it's hobbyists learning or professionals doing 
emulated build clusters on cheap x86 hardware.

> It would explain why there is still no support for 386 on the nptl branch.

There are three different NPTL targets, written by three different people who 
didn't get to see each other's code because SJ Hill refused to check his 
original NPTL code until he got paid for it:

  http://ibot.rikers.org/%23uclibc/20060325.html.gz

>04:11.09	ds	so I'll just slog through and debug it
>04:11.16	sjhill	debug what?
>04:11.24	ds	why I'm getting segfaults
>04:11.29	sjhill	*sigh*
>04:11.34	sjhill	you're wasting your time
>04:11.47	sjhill	i have the 2000+ lines of patches needed to make the dynamic
> loader work 
>04:12.05	sjhill	or are you talking just normal binaries?
>04:12.18	ds	both, actually
>04:12.22	sjhill	forget NPTL
>04:12.33	sjhill	the normal stuff, that is a problem
>04:13.07	ds	are you saying that you have stuff that's not checked into the
> nptl branch? 
>04:13.14	sjhill	yes.
>04:13.17	ds	ah, ok
>04:13.21	ds	i missed that part
>04:13.24	ds	sorry
>04:13.37	sjhill	np
>04:13.44	sjhill	i thought i was being clear, but guess not
>04:14.57	ds	I can't say that I tested static binaries too thoroughly
>04:15.19	ds	so I may have just done something blatantly stupid
>04:15.28	sjhill	static NPTL binaries will absolutely not work
>04:15.34	sjhill	i haven't even debugged them
>04:15.40	sjhill	they segfault all over the place
>04:16.10	dalias	it looks like i'm going to have to write my own pthread
> implementation.. 
>04:16.14	dalias	maybe uclibc can use it once i'm done
>04:16.22	dalias	imo nptl is hopelessly broken
>04:16.27	sjhill	you are an idiot
>04:16.42	dalias	um, why do you say that?
>04:16.54	sjhill	the reason the code is not checked in is because i did it
> under contract 
>04:16.59	sjhill	once i get paid, the code gets released
>04:17.02	sjhill	which is in two months
>04:17.12	sjhill	impatient aren't we?

So there you have it, S.J. Hill and Manuel Nova both kept development out of 
tree for a long time, refusing to check it in until they got paid, and the 
result was that mainline development slowed to a crawl, independent 
("competing") attempts to implement the same functionality were kept out of 
the tree, and the longer they stayed separate the harder it got to merge them.

And to this day, there are people who still insist this wasn't really a 
problem, and continue to do the same thing.

> Is there someone within the uclibc developer organization maintaining the
> priorities of the limited developer resources?

In theory, the maintainer.  In practice, not that I've noticed.

> If so, can those be
> communicated to the user community through the web site so that we can all
> make an informed decision whether to continue using the library? Embedded
> storage has become larger and larger recently and the standard glibc
> library is no longer an outrageous choice.

The main reasons I still use uClibc (other than inertia) are:

1) glibc went lgplv3, which I don't want to get on me.
2) glibc requires perl to build.

> If it is a matter of resources, why don't you post a message on your web
> site asking for help. I am sure there are hundreds of qualified individuals
> that can help with the project.

The problem isn't a lack of developer time.  Lots of developers would be happy 
to help out.  I've done it, and here's BusyBox maintainer Denys Vlasenko 
repeatedly taking an interest:

  http://lists.uclibc.org/pipermail/uclibc/2008-July/040588.html
  http://lists.busybox.net/pipermail/uclibc/2009-February/042022.html

The problem is coordination.

First of all, they decided to do the merge somewhere other than the -dev 
branch, which was either an enormous mistake in retrospect or they _meant_ it 
to take 3 years and still be stalled:

  http://lists.uclibc.org/pipermail/uclibc/2006-August/037013.html

Secondly, the project is set up so that there are bottlenecks that only 
specific people can resolve, and those people then sit on those bottlenecks for 
months until somebody else is made the new bottleneck.  (Oddly, this somebody 
is never the project's maintainer...)  Meanwhile other people post random 
unrelated patches here in a steady trickle, wihch can never go into a release 
due to said bottlenecks.

The fun part is the musical rotating bottlenecks.  As noted above, sjhill was 
the NPTL bottleneck back in 2006.  His merge estimates tended to be things 
like "two months":

  http://lists.uclibc.org/pipermail/uclibc/2006-March/035793.html

Five months later, Peter Mazinger beat some activity out of him:

  http://lists.uclibc.org/pipermail/uclibc/2006-August/016213.html
  http://lists.uclibc.org/pipermail/uclibc/2006-August/036995.html
  http://lists.uclibc.org/pipermail/uclibc/2006-August/037042.html
  http://lists.uclibc.org/pipermail/uclibc/2006-August/037121.html

And so it continued on in 2007, where he was "a little behind doing customer 
releases":

  http://lists.uclibc.org/pipermail/uclibc/2007-May/038742.html
  http://lists.uclibc.org/pipermail/uclibc/2007-August/039210.html

Of course I started complaining about lack of releases and questioning the 
nptl branch, yet again.  Of course there were big long threads...

  http://lists.uclibc.org/pipermail/uclibc/2007-September/039215.html
  http://lists.uclibc.org/pipermail/uclibc/2007-September/039236.html

Just like a year later: big long threads:
  http://lists.uclibc.org/pipermail/uclibc/2008-September/019976.html

Anyway, at some point sjhill either threw in the towel or stopped responding, 
and Carmelo stepped up to do the merge, so he became the one and only person 
trying to merge the three branches, and thus the bottleneck:

  http://lists.uclibc.org/pipermail/uclibc/2008-April/019260.html

And he remained the bottleneck for a while:

  http://lists.uclibc.org/pipermail/uclibc/2008-April/040090.html
  http://lists.busybox.net/pipermail/uclibc/2009-February/041949.html
  http://lists.uclibc.org/pipermail/uclibc/2009-June/042553.html

This message is particularly amusing in retrospect:

  http://lists.uclibc.org/pipermail/uclibc/2008-April/019260.html

He was the guy who just declared this problem no longer interesting.

I've never understood why it's a separate branch:

  http://lists.uclibc.org/pipermail/uclibc/2008-December/041670.html

Why we can't just check in the three implementations into -dev and merge them 
in situ.  Put the code into the tree and let the uClibc development community 
have at.

This is especially crazy since NPTL support for uClibc has been implemented 
from scratch at least three different tiimes.  Sjhill did one for mips:

  http://kernel.org/doc/ols/2006/ols2006v1-pages-409-420.pdf
  http://kernel.org/doc/ols/2006/slides/sjh-ols-2006-presentation.odp

Carmelo did one for sh4:

  http://lists.uclibc.org/pipermail/uclibc/2007-August/039207.html

And of course codesourcery did its own from scratch for arm, and maintained it 
while while trying to get it merged:
  http://lists.uclibc.org/pipermail/uclibc/2006-September/037393.html
  http://lists.uclibc.org/pipermail/uclibc/2009-January/041779.html

In the amount of time that's been wasted on the bottleneck-based merge 
approach in a separate -dev tree, NPTL could have been implemented for every 
single supported target about three times over.

Meanwhile, the "don't break -dev by dumping nptl into it" approach has meant 
that we nobody's interested in testing -dev and nobody's interested in cutting 
releases from -dev, so stability of -dev and development speed in -dev are 
both much much slower than if the nptl patches had just been merged back in 
2006.

Instead, like the proverbial cutting wedge whose edge splits into two points, 
foreward progress goes to zero.

> Regards,

Rob
-- 
Latency is more important than throughput. It's that simple. - Linus Torvalds


More information about the uClibc mailing list