[OpenAFS] OpenAFS vs NFSv4 (linux)

Harald Barth haba@pdc.kth.se
Wed, 30 Aug 2006 02:03:50 +0200 (MEST)

>> Well, it exists and it comes with the kernel.org sources since a long time
>> now. However, it's far from usable. Read Documentation/filesystems/afs.txt
>> from a recent kernel for details.
> Hm, i am not sure here, but i always thought that this is the module from the
> Arla sources?
> regards
>    --lars

Let me say that again: No no no no. I wonder how much that "how
difficult can it be"-project in the kernel has harmed AFS in general.
What first impression of AFS do users get? The RH-kAFS is the standing
proof that stuff does not need to be working to get distributed with
the kernel.

Let me try to make a table:

Name	License    Shipped from   Concept                   Status on Linux
OpenAFS	IPL	   openafs.org    kernel module	            works

Arla	BSD(3)+GPL stacken.kth.se module + userland program works

RH kAFS	GPL        with kernel    in kernel                 proof of concept

NFSv4	BSD(3)?	   with kernel	  in kernel		    ?

So there have been two working AFS client implementations with a
choice of licenses a while now and none of them has made it into the
kernel. In contrary, more and more time has to be spent by OpenAFS and
Arla folks just to keep up with the new ways the Linux kernel API is
changed every time between minor releases. It makes me wonder if a
project has to be part of the kernel to have the right to work
together with it? Is there a "you shall not have any other kernel
modules besides the kernel distrubution" rule?

As we have seen in the previous discussion, there are people who get
upset and shout "you are not allowed to do this" when OpenAFS IPL code
wants to call GPL:ed kernel symbols. Sometimes even when GPL:ed Arla
code wants to continue to use GPL:ed kernel symbols. These folks I
ask to look at the following code fetched from the kernel:

| #
| # Makefile for the Linux nfs filesystem routines.
| #
| obj-$(CONFIG_NFS_FS) += nfs.o
| nfs-y                   := dir.o file.o inode.o nfs2xdr.o pagelist.o \
|                            proc.o read.o symlink.o unlink.o write.o
| nfs-$(CONFIG_ROOT_NFS)  += nfsroot.o mount_clnt.o      
| nfs-$(CONFIG_NFS_V3)    += nfs3proc.o nfs3xdr.o
| nfs-$(CONFIG_NFS_V4)    += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
|                            delegation.o idmap.o \
|                            callback.o callback_xdr.o callback_proc.o
| nfs-$(CONFIG_NFS_DIRECTIO) += direct.o
| nfs-objs                := $(nfs-y)
Then look at the licenses of the listed files and at the end of inode.c.

$ grep MODULE_LICENSE inode.c 

Could someone explain to me how the differnt licensed codes are
combined here to result in a GPL:ed module?