From d11fe72194bdb4b64a1ea4e93b5c1085228fc68b Mon Sep 17 00:00:00 2001 From: fedir Date: Fri, 16 May 2025 19:00:55 +0200 Subject: [PATCH] Updated evaluation --- evaluation.tex | 31 +++++++++++-------------------- main-en.pdf | Bin 1274709 -> 1274621 bytes 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/evaluation.tex b/evaluation.tex index 5054c7b..13af9b1 100644 --- a/evaluation.tex +++ b/evaluation.tex @@ -12,11 +12,9 @@ We tried to asses the quality of ICFS by the following metrics: \section{Test environment} -For performance and usability tests, we used an HP Pavilion Laptop 15-cc563st with an Intel® Core™ i7-7500U processor, a Western Digital WDS250G2B0B WD Blue 3D NAND internal M.2 SATA SSD and 12 GB of DDR4 RAM, running Fedora Linux 42 (Workstation Edition) with Linux 6.14.5-300.fc42.x86\_64 kernel, GNOME 48 desktop environment with Wayland window session. +Performance and usability evaluations were conducted on an HP Pavilion Laptop 15-cc563st equipped with an Intel® Core™ i7-7500U processor, a Western Digital WDS250G2B0B WD Blue 3D NAND M.2 SATA SSD (250GB), and 12 GB of DDR4 RAM. The system ran Fedora Linux 42 (Workstation Edition) with kernel version 6.14.5-300.fc42.x86\_64 and GNOME 48 under the Wayland session. For additional compatibility testing, a KVM virtual machine hosted on the same hardware emulated a Debian GNU/Linux 12 (bookworm) environment with kernel 6.1.0-27-amd64, GNOME 43.9, and the X11 windowing system. The virtual machine had 2 CPU cores and 2 GB of RAM. -For additional compatibility tests, a KVM virtual machine running on the same laptop was used. The OS on the virtual machine was Debian GNU/Linux 12 (bookworm) x86\_64 with 6.1.0-27-amd64 kernel, GNOME 43.9 with X11 windowing system. The virtual machine was given 2 CPU cores and 2 GB of RAM. - -To assess the qualities of ICFS during regular usage, we have mounted it to a directory pre-filled with files, and attempted to access the files with different software. While trying to simulate common use-case scenarios, we tested the following programs' compatibility and usability with ICFS: +To simulate real-world usage, ICFS was mounted to a directory pre-populated with files, and interactions were tested across six widely used applications: \begin{itemize} \item {\TeX}studio. @@ -27,7 +25,7 @@ To assess the qualities of ICFS during regular usage, we have mounted it to a di \item Standard command line core utilities (e.g. \verb|ls|, \verb|cd|, \verb|grep|, ...). \end{itemize} -We chose these programs not only because of their commonality, but also since they exhibit fairly diverse patterns of filesystem usage that are relevant in practice. +These tools were selected for their prevalence and diverse filesystem interaction patterns. Except for Syncthing and Firefox (distributed via Flatpak containers), all applications were installed as native packages. \iffalse @@ -43,11 +41,9 @@ For performance testing, special scripts were written, that test the speed of `o \section{Usability} -While it is difficult to put an objective score on the ease of use of any system, we measure the usability of ICFS by the amount of dialogues the user has to consciously react to while using the system. +Testing revealed that most applications interacted smoothly with ICFS. TeXstudio and Neovim required a single permission prompt when opening existing projects, with no further interruptions for new file creation. -In our testing we found that most programs' filesystem usage was quite manageable with ICFS. {\TeX}studio and Neovim only required the user to interact with a single dialogue when opening existing projects, and none when creating new files. - -The file manager Nautilus generally did not require any access permissions to function, but generated more dialogues than initially expected. When started, Nautilus opened files to scan them to display mini-previews of their contents. +GNOME Files (Nautilus) exhibited unexpected behaviour. While functional without access permissions, its thumbnail generation process triggered repeated prompts. The file manager employs an external utility, gdk-pixbuf-thumbnailer, to create previews of files such as images. \begin{figure}[H] \centering @@ -55,24 +51,19 @@ The file manager Nautilus generally did not require any access permissions to fu \caption{Example of a picture mini-preview: image on the left is the scaled-down version of the actual image stored in the file.} \end{figure} -So, for every image to be scanned, a permission was required. It might seem like a simple problem to solve at first: after all if the user gives even a temporary permission to the entire folder, all images should open seamlessly. The issue is, that Nautilus uses another program (gdk-pixbuf-thumbnailer) to scan images on its behalf, one image at a time. Hence, every temporary permission given to that program, will only last until the next image is opened. One practical solution to this problem is to give gdk-pixbuf-thumbnailer a permanent permission to access the folder in question. +Each preview required individual authorisation because the thumbnailer operates per-file, invalidating temporary folder permissions after each new image access. A pragmatic solution involves granting permanent access to the thumbnailer for specific directories -- a trade-off between convenience and security. -The web browser used the filesystem only when a file was downloaded and consequently needed saving. To select the path for the file, web browsers use file selection dialogues provided by the system file manager. +Firefox interactions were limited to file downloads and uploads, which utilise system-level file selection dialogs managed by the system file manager. \begin{figure}[H] \centering - - \includegraphics[width=\linewidth]{./images/file-selection-dialogue.png} - - \caption{} + \includegraphics[width=0.6\linewidth]{./images/file-selection-dialogue.png} + \caption{File selection dialogue in Firefox.} \end{figure} -This is mostly solved in my experience. It wasn't as annoying to use the terminal programs as I initially expected. +Hence, it inherited all issues Nautilus had. However, denying Nautilus permissions did not disrupt the download process itself, and ensured users could selectively authorise only the target save location -- a critical safeguard for internet-facing applications. -As for terminal programs, I see these possible \sout{solutions} improvements: -\begin{itemize} - \item Use SID and TTY to identify a shell session (like \verb|sudo| does). -\end{itemize} +Containerisation significantly impacted Syncthing ’s usability. Flatpak-packaged applications often modify filesystem paths visible within their sandbox. In Syncthing’s case, the executable’s relocated path invalidated \verb|/proc/pid/exe| -- a symbolic link in Linux’s procfs filesystem that typically points to a process’s binary. ICFS relies on this link to verify process identities for persistent permissions. \section{Performance} diff --git a/main-en.pdf b/main-en.pdf index b8d7e1bcdf7fc8e8255fd6bd652a86cad9a4c805..3f779847e92b39c1589ebfc02642d33165654c92 100644 GIT binary patch delta 16468 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