NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Propose to link fuse-encfs against pkg libperfuse [Was Re: mmap errors related to using encfs]



Things are seeming very fuzzy to me and we need clarity before we can
agree to change anything.

First, I should be clear that we are only talking about how to use the
high-level FUSE API.  The low-level API and /dev/fuse are only available
via libfuse/perfuse and perfuse, respectively.  So no one has ever
suggested, nor made it work, to use a filesystem that uses the low-level
or kernel API on NetBSD, other than via perfuse.  Indeed, that's why
manu@ wrote perfuse.  I am only aware of glusterfs which is in this
category (but that's very important).

Some comments:

  I don't know what "pkg fuse" means.  If you mean
  pkgsrc/filesystems/fuse, then it doesn't make sense to use librefuse,
  as filesystems/fuse is the standard implementation of the FUSE API,
  and expects to talk to /dev/fuse.  I am calling this libfuse as that
  is what is installed by that package.

  You talk about fuse-* "linking with".  But, the way we do things is to
  include mk/fuse.buildlink3.mk.  And the way those work is that we have
  logic to select defaults and variables to list which options are
  acceptable to the package and which are preferred to the user.  I see
  no reason to depart from our practices in this area.  Perhaps that's
  what you mean.

  Some people prefer librefuse because it does not involve a daemon and
  has fewer data copies.  It is meant as an compatible implementation of
  the high-level API.  Some people prefer libfuse/perfuse because of a
  belief in greater compatibility.  It is clear that we do not have
  consensus and that this is a situation where preferences differ
  depending on how one gives weight to various issues (which is ok).

  In dealing with mk/fuse.buildlink3.mk, there are two separable issues.
  One is, on NetBSD, choosing to use librefuse (/usr/include/fuse.h and
  a faked-up pc), vs the fuse package.  This does not appear to be
  implemented and I think most would think that adding it is reasonable.
  The second is changing the default away from librefuse.  Comments have
  been mixed, and I think that should not happen soon, at the very least
  because this new way doesn't exist yet in pkgsrc and thus does not
  have wide experience.

  You asserted or at least implies that encfs mmap does not work when
  linked with librefuse but does with libfuse/perfuse.  But that (that
  it works on NetBSD with libfuse/perfuse) sounds like news, not
  something I've seen on the list, and we lack an analysis of what is
  missing and why.  It could be useful to add mmap to librefuse, or at
  least to clarify some documentation.
  
  It is normal to have a bl3 for a package and to select the base system
  version if adequate and present, and the package if not.  That already
  exists for filesystems/perfuse.  So we talk about depending on the
  perfuse package or not, with the understanding that this may resolve
  to an actual package or to the base system.   pkgsrc/filesystems/fuse
  does link against perfuse and everything about this seems correct.

  There is very little clarity about multiple FUSE API versions and the
  extent to which both libfuse and librefuse do or don't support this,
  and what various fuse-foo programs do.  To make progress, someone is
  going to have to actually analyze this by reading header files and
  documentation.  (It seems obvious that librefuse should have at least
  the level of compat that FUSE does.)

  Related, I've been hearing about the FUSE 3.0 API, but fuse in pkgsrc
  is at 2.9.3.  It appears to have API level 26.

So open questions requiring careful and precise analysis are:

  What's going on with mmap on NetBSD with FUSE, in both the
  libfuse/perfuse case, and the librefuse case?

  What is the situation with (upstream) libfuse API versions?

  How do librefuse versions related to libfuse versions?

  What is the situation with various filesystems in terms of which API
  version they use?  What does upstream libfuse say about this?

Some notes:

  If I flip fuse-encfs's Makefile to use filesystems/fuse instead of
  fuse.buildlink3.mk, it builds, and works.  But git fails with a
  complaint about mmap.
  


Home | Main Index | Thread Index | Old Index