RFC: ABI break

Aurelien Jarno aurelien at aurel32.net
Thu Dec 29 09:50:18 UTC 2005


On Sat, Dec 24, 2005 at 03:59:07AM +0100, Petr Salinger wrote:
> Hi.
> 
> I thought about it, here is an another approach:
> 
> Bump soname intentionally to libc0.2 and clean up our glibc interface.

Bumping the soname is tricky, because it implies rebuilding all packages
in the archive, respecting the dependencies (which is even more
difficult for packages which needs themselves like gnat or ghc6). Have a
look at the c++ transition in Debian, and it is only a small part of the
packages. Moreover, it won't be possible to change the packages name to
track the changes, so this will be probably lead to package loading both
version of the libc at runtime, which causes crashes.

I don't say we should not change the soname, but we should avoid that if
possible. If it is not possible, we should do it, but I expect a
duration of one or two months.
 
> - no difference between xxx and xxx64 (in both data structures and functions)
> 	now it is valid for off_t,
> 	but not for fsblkcnt_t, fsfilcnt_t
> 
> - require minimal kernel version 5.x
>  	basic glibc requires 5.0 
> 	linuxthreads requires 5.4 with our modifications
> 
> - use user space data structures based on FreeBSD 6.0
> 	now it is based on obsolete 4.x 
> 	compatibility with 5.4 should be without problems, 
> 	see syscalls diff below
If the glibc could be compatible with both kernel, it is a good idea.
Moreover, we don't know when the compability layer with 4.x will be
removed, but it may happen soon, so better change that now.

> - require only syscalls available on FreeBSD 5.x
> 	shouldn't be problem,
>     	diff between 5.4 and 6.0:
> 
>          445     AUE_NULL        MNOSTD  { int audit(const void *record,  
>   	 446     AUE_NULL        MNOSTD  { int auditon(int cmd, void 
>   	 447     AUE_NULL        MNOSTD  { int getauid(uid_t *auid); }
>   	 448     AUE_NULL        MNOSTD  { int setauid(uid_t *auid); }
>   	 449     AUE_NULL        MNOSTD  { int getaudit(struct auditinfo 
>   	 450     AUE_NULL        MNOSTD  { int setaudit(struct auditinfo 
>   	 451     AUE_NULL        MNOSTD  { int getaudit_addr( \
>   	 452     AUE_NULL        MNOSTD  { int setaudit_addr( \
>   	 453     AUE_NULL        MNOSTD  { int auditctl(int cmd, char 
>   	 454     AUE_NULL        MSTD    { int _umtx_op(struct umtx *umtx, 
>   	 455     AUE_NULL        MSTD    { int thr_new(struct thr_param 
> 
> 
> - kfreebsd-kernel-headers based on FreeBSD 6.0

What is the benefit of doing that? You show us that there is very few
differences in the syscalls, but there is probably a lot more
differences in the .h files, that are used by userspace programs, so I
expect some breakage there. Before we could declare the 5.4 kernel
obsolete, we should avoid such things.

Bye,
Aurelien

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32 at debian.org         | aurelien at aurel32.net
   `-    people.debian.org/~aurel32 | www.aurel32.net



More information about the Glibc-bsd-devel mailing list