https://bz.apache.org/ooo/show_bug.cgi?id=128049

dam...@apache.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dam...@apache.org

--- Comment #4 from dam...@apache.org ---
The path:

/run/user/1000/gvfs/smb-share:server=cripsul,share=publica/folder/file.xls

is a virtual filesystem, created by the GVFS daemon
(https://wiki.gnome.org/Projects/gvfs) mentioned in "There is also FUSE support
that provides limited access to the GVfs filesystems for applications not using
GIO." (https://wiki.gnome.org/Projects/gvfs).

The architecture of this FUSE filesystem is something like this:

   Apps (eg. OpenOffice)
    |
    v
   libc  gvfsd-fuse
    |     ^     |
    |     |     |(gio API)
    |     |     v
    |     |   gvfsd-smb
    |     |     |
    |     |     v
    |     |   libsmbclient
    v     |     |
----------|-----|-----------
  kernel  |     |
    |     |     v            network
    v     |   network I/O ----------------> SMB server
   VFS    |
    |     |
    v     |
 +-------------+
 |   FUSE      |
 +-------------+

And GVFS provides many other backends, eg. FTP, SSH/SFTP, NFS, archive, WebDAV,
etc. Those would be implemented similarly, with gvfsd-smb replaced by the
relevant backend service, which implements that virtual filesystem however it
likes.

Now if I am correct, ALL these services would suffer from this bug, ie. opening
an SSH filesystem in your file browser and trying to double-click on an .xls
file there, would also get "General input/output error while accessing
<filename>" in OpenOffice. (Can someone confirm?)

And if that happens, I know exactly why it happens.

Firstly FUSE has practically become a Linux-only project, with APIs so specific
to Linux that they cannot be implemented anywhere else. See the discussion on
FreeBSD's bug tracker at
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236340 where they said it
cannot be supported, "just like OSX, NetBSD, OpenBSD, or Illumos". With users
and developers of those others excluded, of course it gets less tested and has
more bugs, with less incentive to fix it. Software depending on FUSE's
Linux-only features, also gets used and tested and fixed less by those on other
OSes, and thus suffers from this Linux-only fundamentalism.

Now the actual bug is in gvfsd-fuse, which has to translate POSIX system calls
coming from applications (like OpenOffice), into GIO API calls to GVFS backends
(like gvfsd-smb). Older versions of GIO only supported very general high-level
operations that couldn't cater to all POSIX APIs, particularly all the open()
flags. New versions of GIO do support a broader open() API that would be
better. Unfortunately, to use the new GIO API, 9 new methods need to be
implemented in each of the many GVFS backends. Each of these methods is
extremely complex to implement, as these backend run in separate processes,
using an application-private DBus connection to make remote procedure calls to
them.

This is the infamous gvfs bug: https://gitlab.gnome.org/GNOME/gvfs/-/issues/249
which breaks many other applications too (LibreOffice included, at least back
in 2019), and has not been fixed in 9 years, and has little hope of being fixed
upstream.

Now I see 2 ways to fix this:
1. We submit patches to GVFSD to get gvfsd-fuse fully supporting the POSIX file
APIs like it should, which would also allow gvfsd-fuse to work on other
operating systems. That's a lot of work though.
2. We change OpenOffice to detect that the file is on a gvfsd-fuse filesystem,
and attempt to use GIO API to access it directly instead, bypassing gvfsd-fuse
to do this:


   Apps (eg. OpenOffice)
    |
    | (gio API)
    v
   gio
      \
       \
        +---> gvfsd-smb
                |
                v
              libsmbclient
                |
----------------|-----------
(kernel)        |
                v            network
            network I/O ----------------> SMB server

This should be pretty easy, as we already have a GIO content provider that
could be used (in main/ucb/source/ucp/gio). It's probably also somewhat lighter
and faster.

But before we begin any development, can someone please test:
1. Does this bug happen with other filesystems such as SSH/SFTP?
2. What happens if you type the GIO URL to the file in the file open dialog? It
probably looks something like "smb://cripsul/republica/folder/file.xls".

-- 
You are receiving this mail because:
You are the assignee for the issue.

Reply via email to