All Projects → crossmeta → cxfuse

crossmeta / cxfuse

Licence: other
Crossmeta FUSE Windows Port

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to cxfuse

bash-zsh-on-windows-cmder
Integration of Bash, ZSH on Windows with Cmder
Stars: ✭ 37 (-32.73%)
Mutual labels:  wsl, wsl-ubuntu
webi-installers
Primary and community-submitted packages for webinstall.dev
Stars: ✭ 421 (+665.45%)
Mutual labels:  wsl, wsl-ubuntu
fuse-nfs-crossbuild-scripts
fuse-nfs for windows using dokany
Stars: ✭ 35 (-36.36%)
Mutual labels:  fuse, dokany
WSL-Distro-Rootfs
Install anyrootfs as a WSL Instance (for Windows 10 FCU 64bit or later) [WSL-DistroLauncher](https://github.com/yuk7/WSL-DistroLauncher)
Stars: ✭ 22 (-60%)
Mutual labels:  wsl, wsl-ubuntu
Dokany
User mode file system library for windows with FUSE Wrapper
Stars: ✭ 4,055 (+7272.73%)
Mutual labels:  fuse, drivers
significa.co
Significa - A digital design-led agency focused on product development.
Stars: ✭ 72 (+30.91%)
Mutual labels:  development
fatx
Original Xbox FATX Filesystem Library, Python bindings, FUSE driver, and GUI explorer
Stars: ✭ 87 (+58.18%)
Mutual labels:  fuse
elfuse
FUSE filesystems in Emacs Lisp
Stars: ✭ 61 (+10.91%)
Mutual labels:  fuse
fusera
A FUSE interface to the NCBI Sequence Read Archive (SRA)
Stars: ✭ 28 (-49.09%)
Mutual labels:  fuse
dwoole
⚙️ Docker image for Swoole apps with Composer, auto-restart on development and a production-ready version.
Stars: ✭ 32 (-41.82%)
Mutual labels:  development
ar-simulation
AR Simulation for Unity • Right in the Editor • Minimally Invasive
Stars: ✭ 101 (+83.64%)
Mutual labels:  development
dotfiles
~/.dotfiles
Stars: ✭ 28 (-49.09%)
Mutual labels:  wsl
awesome-dev-discord
A curated list of official, development-related Discord server
Stars: ✭ 153 (+178.18%)
Mutual labels:  development
polycephaly
Groovy code to build z/OS source code files with Jenkins and Git
Stars: ✭ 14 (-74.55%)
Mutual labels:  development
devstack
Get up and running quickly to develop or extend Open edX services
Stars: ✭ 372 (+576.36%)
Mutual labels:  development
devproxy
A local development http proxy with hosts spoofing written in Go
Stars: ✭ 35 (-36.36%)
Mutual labels:  development
dockerfiles
🐳 Dockerfiles for Nette Framework. Nette in Docker. (@nette)
Stars: ✭ 15 (-72.73%)
Mutual labels:  development
tomcatplugin
Tomcat plugin for Eclipse
Stars: ✭ 63 (+14.55%)
Mutual labels:  development
iOS-Daily-Tips
Daily Tips From iOS World 🔥
Stars: ✭ 42 (-23.64%)
Mutual labels:  development
D365FONinjaDevTools
To make of you a Ninja Developer in Dynamics 365 For Finance and Operations
Stars: ✭ 70 (+27.27%)
Mutual labels:  development

Crossmeta FUSE for Windows

Crossmeta FUSE (Filesystem in Userspace) is the easiest way to port your favorite FUSE programs to Windows. It is a set of kernel-mode and user mode software that works with Crossmeta Kernel. The project home page is https://crossmeta.io

POSIX File system semantics are provided by Crossmeta Kernel

This means symbolic links, hardlinks, mount, etc are available readily for easy integration with your FUSE program.

Multi-threaded FUSE DLL in userspace

Hides all the complexity of interfacing with kernel-mode driver interface and provides both the popular APIs

  • Fuse high-level, synchronous API
  • Fuse low-level, asynchronous API.

Fuse mounts are managed in NT kernel namespace and is available to all Windows applications.

FUSE Hello, World Sample

Examples

FUSE comes with following examples. hello.c The "Hello World" sample FUSE program shows uses the high-level API by including fuse.h. It shows how easy it is to get started. Only changes required was manual initialization, since MSVC is compiler being used here. If using MinGW cross compile environment with gcc the following is not applicable.

static struct fuse_operations hello_oper = {
	.getattr        = hello_getattr,
	.readdir        = hello_readdir,
	.open           = hello_open,
	.read           = hello_read,
};

Changed to

hello_oper.getattr      = hello_getattr;
hello_oper.readdir      = hello_readdir;
hello_oper.open         = hello_open;
hello_oper.read         = hello_read;

hello_ll.c The same "Hello World" program using the FUSE Low level API by including fuse_lowlevel.h. Once again only changes required was the manual initialzation of fuse_operations structure.

Updated Build information from Blog

Build Environments

Uses standard Microsoft DDK Build environment that comes with compiler and necessary header files. No need to install Visual Studio Compiler. The most convenient way is to use the Microsoft DDK build environment.

Install Microsoft DDK 7.1 and start command shell with DDK build environment set to i386.

git clone https://github.com/crossmeta/cxfuse.git
set BUILD_ALLOW_COMPILER_WARNINGS=1
set VFS_LIB_PATH=c:\users\<user-name>\cxfuse\lib\w2f\free\*
set VFS_LIB_TARGET=c:\users\<user-name>\cxfuse\lib\w2f\free
cd cxfuse\hello
build -cz

Installation

  • Download [Crossmeta 2.0] (https://github.com/crossmeta/cxfuse/releases/latest)
  • Extract crossmeta-fuse_2_0_1.zip to %TEMP\temp\crossmeta
  • Launch elevated cmd prompt (Administrator) console
  • cd %TEMP%\crossmeta
  • Run setup.exe Follow instructions to install Crossmeta Release 2.0 software.

No reboot required

Check Crossmeta kernel is up and running

cd c:\program files\crossmeta
service_crossmeta status
cxvfs is RUNNING
cxfuse is STOPPED
cxnfs is STOPPED
cxhfs is STOPPED
cxvfsmgr is RUNNING

Start cxfuse service

C:\Program Files\crossmeta>net start cxfuse

The CROSSMETA FUSE kernel mode driver service was started successfully.

Run hello.exe with mount point in the Crossmeta namespace, which is any directory in V:\ drive

C:\Program Files\crossmeta>busybox.exe ls /

bin    cachefs  etc  lib  lost+found  proc  sbin  tmp   var  dev  home
lib64  mnt      root testdir  usr

copy C:\user\user\cxfuse\lib\w2k\free\i386\hello.exe

C:\Program Files\crossmeta>hello.exe /mnt
Sorry run in background not supported.

From another command window

V:\>cd \mnt
V:\mnt>dir
 Volume in drive V is vfsroot
 Volume Serial Number is 0122-B5C1

 Directory of V:\mnt

12/31/1969  05:00 PM    <DIR>          .
12/31/1969  05:00 PM    <DIR>          ..
12/31/1969  05:00 PM                13 hello
	       1 File(s)             13 bytes
	       2 Dir(s)       5,242,880 bytes free
V:\mnt>type hello

Hello World!

V:\mnt>

To stop the FUSE program, just issue umount /mnt

Crossmeta BusyBox v0.60.5 (2017.03.23-21:18+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

sh: can't access tty; job control turned off
# umount /mnt
#

Summary

With Crossmeta FUSE for Windows, it is not only easy to port FUSE programs but also the fastest with no or minimal changes required to your existing FUSE program. Also the Crossmeta kernel provides the necessary POSIX APIs without dependency on yet another software package.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].