NathanNeurotic/PS2-Servers
NathanNeurotic/PS2-Servers has 38 GitHub stars and 2 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-14 20:01 UTC. Last push 2026-11-13.
Measured star growth
- in 24h
- +1
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Click-and-go SMB, HTTP, UDPBD & UDPFS, Retro Achievements, LAN servers for PlayStation 2 Homebrew! Easy to use GUI + Edge version for routers! (Works with RiptOPL, Launchstation, OPL, POPSTARTER, EMBER, NEUTRINO, NHDDL, MODULO, and more!)
AIREADME.md
OriginalPS2-Servers
in collaboration with https://github.com/FatBaldDad/PS2-EtherDrive
📖 Documentation Site: https://nathanneurotic.github.io/PS2-Servers/
🎮 Console Loader Docs: RiptOPL Documentation
PS2 Servers runs game and file servers for network-capable PlayStation 2 homebrew. Desktop provides a Tkinter launcher; Core runs the same Python servers from a terminal; Edge is a separate Go server for routers, NAS, Raspberry Pi, and headless computers.
Choose the protocol your loader supports. A server mode being available here does not add that protocol to a PS2 application.
| Mode | Default port | Use |
|---|---|---|
| UDPFS | UDP 62966 (0xF5F6), plus an automatic data port |
File and optional block-image serving for UDPFS clients such as NHDDL/Neutrino and RiptOPL; automatic Standard/Modulo negotiation |
| SMBv1 | TCP 1025 in Desktop; 1111 in Core/standalone | Guest file sharing for OPL and other SMBv1 clients |
| SMBv2 / SMBv3 | TCP 1445 | Authenticated file sharing for clients that support these dialects; not a replacement for SMBv1 in an SMBv1-only loader |
| HTTP | TCP 1100 | Experimental game streaming for compatible OPL HTTP clients, with an opt-in RiptOPL path-aware game list; see HTTP setup and validation |
| NFS | TCP 2049 (fixed) | Experimental NFS 4.0 game folder for unfs4 clients (RiptOPL's NFS protocol, Neutrino's NFS mode, Launchstation's nfs: driver); read-only unless Allow writes is on; see NFS setup |
| UDPBD | UDP 48573 (0xBDBD) |
Image, raw drive or virtual exFAT folder served as a block device |
Desktop has seven game/file server cards plus RetroAchievements with xeRAbora and Caduceus console modes. Edge provides UDPFS, SMBv1, UDPBD, and a separate HTTP management dashboard; it does not provide the HTTP game server, NFS or SMB2/3. See editions and Edge setup.
Optional desktop game library
Desktop now has a LIBRARY tab: a searchable SQLite catalogue of PS2 images,
a safe CD/DVD folder scan, optional ISO/CSO/ZSO/CHD imports, editable game titles
and disc IDs, and 8-bit PNG artwork conversion to the chosen ART/ folder.
Use Setup guide for a six-step LAN/share/console walkthrough. The companion
also supports JSON metadata import/export and online SQLite backups.
RiptOPL settings… (ABOUT tab) shows a server card's values as the exact
conf_network.cfg / settings_riptopl.cfg lines RiptOPL reads, to type in on the console
or copy into those files. It never includes the PS2's own address or a password.
The Import images action supports a batch of local image files (up to 1,000 per run),
records skips without overwriting any destination, and leaves original images intact.
After scanning, Inspect disc IDs reads ISO/CSO/ZSO/CHD boot metadata in a background
worker and shows an Inspected ID alongside the existing Manual ID. It checks
SYSTEM.CNF and the referenced ELF signature, flags conflicting IDs, and preserves
custom titles, IDs and notes. Double-click a row or press Enter for the result.
Compressed inspection uses bounded sparse reads and requires the format's decoder. See the
library indexing and inspection guide for limits and caching.
Review indexed paths lists duplicate basenames, inspected serials, and
case/Unicode path collisions without changing files. In RetroAchievements'
Manage game library, opt into Include Desktop indexed paths and titles
to reuse these PS2 paths and custom titles, including nested images. The shared
view reads the Desktop catalogue without merging either database; RA support
still requires the image hash. Existing top-level PS2 images and PS1 POPS VCDs
remain available. Indexing a nested path does not establish console launch support.
The Repair ART action converts legacy _COV.jpg, _ICO.jpg, _LAB.jpg,
_COV3.jpg (or JPEG/WebP/BMP equivalents) to 8-bit indexed PNG without deleting
sources or replacing existing PNGs. Transparent logos and discs keep their
alpha. Download missing art is opt-in. It has no built-in source: you paste
an https:// URL template containing {serial} and confirm a preview before
anything is fetched. Existing files are never replaced. The companion does not
queue remote ISO URLs or download anything automatically.
This is separate from game serving: selecting a games root here does not reconfigure SMB, UDPFS, UDPBD or HTTP cards. The catalogue contains paths and metadata only, not copies of the games, artwork or VMC saves. Copying an image uses an exclusive new-file create and will never overwrite an existing image. Stop console reads from that directory during imports; do not copy over an image a console is playing. Existing files and artwork are preserved by default.
For artwork, enter the exact RiptOPL identity: PS2 disc ID for ISO, VCD filename for POPStarter, ELF filename for Apps, or Ember game-folder name as appropriate. The library never silently renames games. The PNG writer uses Pillow (bundled with desktop builds; install it for source conversions) and outputs 8-bit indexed PNGs without forcing Caduceus's fixed cover dimensions. Game catalogues and covers can live in the same root used by server cards, but the library does not need a server to be running.
Quick start
- Download from GitHub Releases. Use the newest pre-release for current development builds; a tagged release may be older. Read that release's download table for the assets actually built.
- Extract the Desktop package and launch
PS2Servers.exeon Windows, the executable on Linux, or the.appon macOS. Keep a portable build's files together. - Choose the protocol your PS2 client actually supports. For UDPFS, SMB,
or HTTP, choose the parent folder of
DVD/andCD/(e.g.D:/PS2Games). For UDPBD, select one image, raw drive, or Virtual exFAT folder. Virtual exFAT presents aDVD/andCD/library as a read-only disk. - Check that the selected LAN IP belongs to the PC interface connected to the PS2. Click Start, then use the displayed address, port, and share in your loader. The LAN IP selector supplies setup hints; it does not bind servers.
For SMBv1, use address type IP, the PC's LAN IP, the displayed port (normally
1025 in Desktop), share games, user guest, and an empty password. UDPFS and UDPBD require
a loader build with that protocol; discovery does not configure the PS2's own IP.
HTTP requires an explicit matching port on the console; follow the HTTP guide.
UDPBD uses UDP 48573 broadcast discovery and exposes a single block device.
The Python UDPBD server uses this fixed port (no --port flag); it does not
list games in DVD/ or CD/. A client-side mass0: label or "cannot open
folder" message does not prove the physical device or identify the failure.
See the step-by-step protocol picker
and UDPBD client/mount troubleshooting.
Start with a known-good plain ISO. Compressed image support and writes depend on the chosen protocol and loader. HTTP is read-only; enabling writes in a server does not add VMC support to a loader that lacks it.
Downloads and requirements
| System | Desktop download |
|---|---|
| Windows x64 | PS2Servers-windows-x64-portable.zip (recommended), or PS2Servers-windows-x64.zip |
| Windows x86 (32-bit OS) | PS2Servers-windows-x86-portable.zip, or PS2Servers-windows-x86.zip |
| Linux x64 | PS2Servers-linux-x64; use PS2Servers-linux-x64-portable.tar.gz when /tmp is noexec |
| Linux desktop integration | PS2Servers-x86_64.AppImage, when present in the release |
| macOS Apple Silicon / Intel | PS2Servers-macos-arm64.zip / PS2Servers-macos-x64.zip |
| ARM/MIPS/router/headless systems | See the Edge build picker, or run Core with Python |
Packaged Desktop includes Python; a separate Python installation is unnecessary.
Source builds use Python 3.12 in CI. The GUI needs Tkinter (for example
python3-tk on Debian/Ubuntu); Core does not need a display. Both computers need
compatible IP settings and a working Ethernet path to the PS2; a wired PC is
preferable to Wi-Fi. Fat PS2s require an Ethernet-capable network adapter.
Portable builds avoid the single-file self-extraction wrapper. They are still unsigned and can be flagged by antivirus. See the antivirus notice. Portable/AppImage availability depends on the release's successful build outputs.
From source
Run Start-Launcher.bat on Windows or ./start-launcher.sh on Linux/macOS.
You can also run the GUI directly:
python ps2servers.py
Core uses the same server implementations and requires no desktop session:
python ps2servers.py --list
python ps2servers.py serve udpfs --root-dir /srv/ps2
python ps2servers.py serve smbv1 --share games=/srv/ps2 --port 1111
python ps2servers.py serve http --root-dir /srv/ps2 --port 1100
python ps2servers.py serve udpbd /srv/images/ps2.img --read-only
python ps2servers.py serve udpfs --help
Replace paths with your own and quote paths containing spaces. A packaged
executable accepts the same serve commands. --serve remains an alias.
Use this entry point for UDPFS to get the same automatic compatibility engine
as Desktop; udpfs_server/udpfs_server.py is the underlying legacy engine.
For unattended Python Core UDPFS, see the Alpine/OpenRC service example and Core troubleshooting guide. The startup banner records build identity and effective socket/timeout/write settings so a service log can identify the running configuration.
External-drive access
The optional Library tab can index root-level and nested images when Include
root and subfolders is selected. Scanning remains top-level CD/ and DVD/
by default. See library indexing for depth/work
limits, cancellation, unknown media, and console launch limitations.
Select the mounted games folder or image file, then click Check access on the server card. Results appear in a dialog and the Terminal log. The check runs without changing permissions or drive contents.
For folders, it verifies directory listing only; it does not claim that every game is readable or that saves/VMC writes work. For image files, it reads one byte and checks a non-truncating writable open unless Read-only is selected. It writes no test data. HTTP checks remain read-only.
On Linux, a file on a mounted external drive needs access through its parent directories and the mount's ownership/permissions. NTFS/exFAT mount options can control access; changing file permissions alone may not resolve it. On Windows, check the target's Security permissions for the account running PS2 Servers. A missing path may mean the drive is disconnected or mounted under a different name. A writable-open failure can also mean the filesystem is read-only.
Ordinary file/folder checks do not open raw disks. On the UDPBD card, the separate Raw drive field has a device-specific capacity/read check. No check changes a drive's format or grants device access.
UDPBD raw disks and partitions (Linux / Windows)
Clear Disk image, then use Select drive beside Raw drive.
The selector distinguishes whole disks from partitions/volumes and shows
model, capacity, filesystem where available, and mount points. Windows volumes
with drive letters are selectable alongside physical disks; boot/system disks
and their volumes are excluded. Linux metadata uses lsblk (util-linux). A device path can also be entered manually. Click Check access
before Start. Mounted targets and disks with mounted child partitions produce
a warning at access-check time and server startup. If metadata is unavailable,
mount state is reported as unknown. Prefer an unmounted target; these checks
are advisory unless Exclusive raw access is enabled. Raw mode defaults to read-only.
For VMC saves, explicitly enable Exclusive raw access and Enable raw writes / VMC,
with Read-only disabled. Busy, boot/system, or unknown targets are refused.
Linux Core example (replace the device with your actual disk or partition):
python ps2servers.py serve udpbd --raw-device /dev/disk/by-id/YOUR-DRIVE
Use an account with read access to that device, or run the Core command with
sudo. File permissions inside a mounted filesystem do not grant access to
its block-device node. Do not grant world-write access.
Windows Core example, from an administrator terminal:
python ps2servers.py serve udpbd --raw-device '\\.\PhysicalDrive2'
Windows also accepts a volume path such as \\.\E: without a trailing slash.
Desktop can use its existing Restart as administrator action when a raw
read is denied. Ordinary image-file/folder sharing still works without elevation.
A whole disk includes its partition table; a partition/volume starts at that partition's first sector. Choose the layout your PS2 client expects. Raw mode exposes all sectors of the selected target over the existing unauthenticated UDPBD service. Stop host applications from modifying that target while serving it, and stop the server before disconnecting it. The server never formats a target. Writes are enabled only by the explicit raw-write option described below.
Capacity comes from the opened device handle, and native sector alignment is handled before UDPBD packetization. A buffer bounded to 64 KiB avoids repeated overlapping reads within a request and is discarded on each new request; it is not a filesystem snapshot. Devices at or above 2 TiB are rejected because this UDPBD protocol advertises a 32-bit count of 512-byte sectors. This feature still requires real-drive and console validation; host tests do not establish loader/filesystem compatibility. Edge and UDPFS are unchanged.
Exclusive raw access and VMC saves
# Read-only with automatic unmount/lock:
python ps2servers.py serve udpbd --raw-device /dev/disk/by-id/YOUR-DRIVE --exclusive
# Explicit write access for a dedicated game drive:
python ps2servers.py serve udpbd --raw-device /dev/disk/by-id/YOUR-DRIVE --exclusive --raw-write
The same flags work on Windows with --raw-device '\\.\E:' or a physical-disk
path. Windows locks each affected filesystem volume before dismounting it and
holds the handles until the server stops. If a lock fails, serving does not
start; no forced dismount is attempted. Closing the handles releases the locks.
Linux unmounts the selected target's filesystems, then opens the block device
with O_EXCL. Failed unmounts, remaining mounts, or a busy device abort startup.
Linux mounts remain unmounted after shutdown or a partially failed startup;
remount them explicitly when finished. Mounted boot/system targets are rejected.
Exclusive access requires device write/admin privileges even for some read-only
Windows lock operations. Check access remains a read-only probe and never
unmounts, locks, or tests writes.
Raw writes allow the UDPBD client to modify every exposed sector. Use a dedicated non-system drive and a trusted LAN: UDPBD has no authentication or encryption. Native-sector read/modify/write preserves neighboring bytes; write bounds are checked and native buffers are flushed before success is acknowledged. An I/O failure or interrupted transfer may leave a partial write; this is not a transactional storage protocol. VMC compatibility still needs PS2 validation.
Virtual exFAT folder
python ps2servers.py serve udpbd --virtual-exfat /srv/PS2Games
In Desktop, clear Disk image and Raw drive, then select Virtual exFAT
folder, containing the DVD/, CD/, and other folders your loader expects.
This creates a read-only virtual disk with an MBR and one exFAT partition. It
works over ordinary host files on Windows, Linux, or macOS without raw-device
privileges, formatting, dismounting, or a full image copy. File payloads are read
on demand; filesystem metadata and layout are fixed at startup. Keep the source
folder unchanged while serving. Changed file size, identity, or modification
time causes a read error rather than silently serving the stale layout. Restart
to refresh the library. Symlinks, special files, invalid exFAT names, and case
collisions are refused. Limits: 100000 entries, 64 directory levels, and a total
virtual disk smaller than 2 TiB. VMC writes are disabled in this mode.
Virtual exFAT is independently implemented from the
Microsoft exFAT specification.
CI checks generated volumes with fsck.exfat from exfatprogs; real-console game
listing and launch are separate validation gates. The established
udpbd-vexfat server provides the
comparison for this folder-to-block-device mode; its implementation is not copied.
UDPFS: games list but fail to launch
On PCs with multiple network interfaces, automatic routing may select a reply address that the PS2 cannot use. Explicit data binding is also the workaround documented by upstream udpfsd.
- Select the PC's IP connected to the PS2 in the launcher's LAN IP box.
- On the UDPFS card, click Use LAN IP beside Bind address (PC), or type
that PC address directly. Do not enter the PS2's address or
0.0.0.0. - Stop and start UDPFS, then try launching the game again.
The button copies and saves the address at that moment. Changing the LAN IP later does not change a saved bind; repeat the step if your PC address changes. Blank bind restores automatic behavior after a stop/start.
Equivalent Core command (replace the example PC address):
python ps2servers.py serve udpfs --root-dir /srv/ps2 --bind 192.168.0.3
This binds Core's data socket; discovery still listens on all interfaces. It selects an address, not a fixed port. Use Data port separately if a manual firewall requires one. In Core single-port/forced-Modulo operation there is no separate data socket, so this data-address setting does not pin discovery.
A log prefix such as [192.168.0.58:62966] identifies the client endpoint.
A later .1.10 prefix means packets arrived from that source; it does not show
the server changing its own bind address. Repeated discovery or seq=0 alone
does not establish the cause of a launch failure. Check the launched loader's
network settings if its source IP changes.
If a game stops partway through loading, run Core with --verbose. When a
console that has files open sends no request for 45 seconds, Core prints one
line saying which of three things happened:
- Still sending. The console is sending out-of-sequence packets.
- Still answers ARP. Its network side is up, and it simply stopped asking. Neutrino's UDPFS driver stops for good after one failed read, so the lines just before this one show what failed.
- No longer answers ARP. Its IOP or network adapter is down.
A log that just stops can't tell these apart on its own.
Protocol mode, ports, and idle timeout
- Protocol mode: Auto is the default. It negotiates Standard and Modulo per peer. Leave Enforce Modulo mode unticked unless explicitly testing Modulo; that override forces Core's legacy single-port Modulo behavior. A forced mode is not the fix for a wrong network interface.
- Port defaults to UDP 62966. In normal two-port mode, the OS chooses one
data port when the server starts. Data port can pin it, for example 62967;
allow both ports on a firewall that uses explicit port rules. CLI
--single-portuses discovery's port for data too. - Idle timeout defaults to 3600 seconds and accepts 60–86400 seconds.
Expiry closes that peer's handles, so long pauses can be affected. Core
rejects
0; it does not disable the timeout. CLI:--peer-timeout SECONDS.
See protocol compatibility for the Core/Edge differences and handoff diagnostics for optional deeper investigation after the simple setup checks.
Direct cable and saved settings
For a dedicated PS2-to-PC cable, enable PS2 is plugged directly into this PC. The helper selects a suitable interface, temporarily configures its address, and offers DHCP to one console. This requires administrator/root permission. Use the DIRECT tab's reported values; do not enable the helper on a router LAN.
Windows also attempts to accommodate a console using a static IP. Linux/macOS direct-link setup is experimental and may require changing the console to DHCP or a matching static address. A launcher and the Neutrino ELF it starts may load different network configuration, so a successful menu browse does not prove the game-launch configuration matches.
Disable direct link before removing the app so it can restore its temporary configuration. On Linux/macOS a reboot clears the temporary address if cleanup was interrupted. Read the DIRECT/TERMINAL output if restoration reports a failure.
Launcher settings are saved per user in launcher.json:
- Windows:
%APPDATA%/PS2-Servers/ - Linux:
$XDG_CONFIG_HOME/ps2-servers/, or~/.config/ps2-servers/ - macOS:
~/Library/Application Support/PS2-Servers/
A portable build (the -portable Windows zip or Linux tar.gz) keeps its
settings, library data and RetroAchievements profile in a data folder next
to the program instead, because of the portable.txt file packed beside it.
Settings an older portable build saved in the per-user folder are read once.
If the data folder cannot be created or written (a read-only drive or folder),
the build falls back to the per-user folder above, so keep the portable folder
writable if you move it between PCs.
Auto-start servers on launch starts saved servers when the app opens; it does not install an OS login task. Windows supports a tray icon; Linux tray support is experimental and depends on the desktop/backend. macOS has no tray support.
Compression
Desktop/Core UDPFS exposes supported CHD/CSO/ZSO images as virtual .iso files.
CSO uses the standard library, ZSO needs lz4, and CHD needs native libchdr.
Release builds bundle the optional libraries; use the Compression support
panel to check the running build. Missing libraries leave those UDPFS formats
unadvertised. Edge supports CSO/ZSO but not CHD. HTTP decodes CHD/CSO on the
server. Its default flat game list passes ZSO through for the client to decode;
the RiptOPL path-aware list decodes ZSO too, because RiptOPL cannot.
Windows security and release verification
The SMBv1 server does not enable Windows' built-in SMB1 optional feature tree. Desktop defaults to TCP 1025; Core/standalone and Edge default to TCP 1111. See SMB setup for dialects, ports, authentication and writes. SMB2/3 uses the separate authenticated server, normally on TCP 1445.
Windows Firewall changes are limited to rules named PS2 Servers - ....
Firewall actions, direct-link configuration, and optional Take port 445
require elevation. Take port 445 temporarily stops Windows File Sharing (and,
for SMB2/3, the srv/srv2/srvnet drivers that keep the port bound) while
the server runs, and starts them again on Stop; default custom-port serving
does not need administrator rights. The SMB2/3 server signs, so Windows 11's
default signing requirement is met with a password card.
Automatic main releases include SHA256SUMS.txt, source archives, and GitHub
artifact attestations. Tagged releases provide per-asset .sha256.txt files;
Edge archives have adjacent .sha256 files. Use the checksum attached to the
exact release you downloaded.
sha256sum -c SHA256SUMS.txt
gh attestation verify PS2Servers-windows-x64.zip -R NathanNeurotic/PS2-Servers
Checksums verify integrity; attestations verify provenance. Neither establishes safety or PS2 compatibility. See SECURITY.md and docs/antivirus-transparency.md for behavior, verification, cleanup, and reporting.
Build and validation
python -m pip install -r requirements-build.txt
python build/build.py
python -m unittest discover -s tests -t . -v
python tools/check_release_compliance.py
Nuitka packages all Desktop server modes. For Edge build/deployment commands, use the operator manual. CI covers host tests, protocol conformance, and builds; see the evidence definitions. Reported success with Desktop/Core and a particular loader does not validate all games, networks, or Edge. HTTP remains experimental; Edge's game launch/write paths still require separate console results.
Legal & responsible use
Please read this before using PS2 Servers.
- Your content, your responsibility. PS2 Servers is a general-purpose file server. It ships no games and no copyrighted content — it only serves files you point it at, from your PC. You are solely responsible for ensuring you have the legal right to use, copy, and serve any games, disc images, saves, or other files, and for complying with the laws of your jurisdiction. This project does not condone or facilitate copyright infringement; the intended use is with homebrew and with backups of media you legally own.
- Not affiliated with Sony. "PlayStation", "PlayStation 2", and "PS2" are
trademarks of Sony Interactive Entertainment. This is an independent, unofficial
fan/homebrew project with no affiliation, sponsorship, or endorsement from Sony,
the Open PS2 Loader team, or any other rights holder. See
NOTICE.md. - Trusted networks only. SMBv1, UDPFS, UDPBD, and HTTP serving are unauthenticated and designed for a private home LAN. Do not expose them to the internet or run them on untrusted networks.
- Data-loss risk. Writable modes let the PlayStation 2 write to the folders and
disc images you share (saves, VMC). Keep backups; use
--read-onlyif you want a strictly read-only share. - No warranty. PS2 Servers is provided "as is", without warranty of any
kind, and the authors' liability is limited, as set out in the Academic Free
License 3.0 (see §7 "Disclaimer of Warranty" and §8 "Limitation of Liability" in
LICENSE). You use it at your own risk.
License and notices
PS2 Servers is licensed under the Academic Free License 3.0 (AFL-3.0). See
LICENSE.
This repository also includes third-party notices and provenance details in
NOTICE.md, including the redistributed Neutrino UDPFS server,
UDPBD protocol references, optional compression libraries, build tooling, and
trademark notes.
Credits & thanks
PS2 Servers builds on the following projects and contributions:
- Rick Gaiser — @rickgaiser — the heart of all
of this. He designed the UDPBD and UDPFS network protocols and wrote the
original servers, alongside Neutrino.
udpfs_server/udpfs_server.pyis his UDPFS server (from Neutrino'spc/host tools), andudpbd_server/udpbd_server.pyis our independent Python re‑implementation of his UDPBD v2 protocol. The network game‑loading here simply does not exist without his work — thank you. - pcm720 — @pcm720 — a core Neutrino contributor and author of udpfsd, a UDPFS server written in Go. If you'd rather not run our Python UDPFS server — e.g. on a low‑end device, or to sidestep the antivirus heuristics that hit unsigned packaged Python builds — udpfsd is an excellent no‑Python alternative: one standalone binary, prebuilt for Windows, macOS, and low‑end ARM/MIPS targets, with the same transparent CHD/CSO/ZSO decompression. Thanks as well for generously taking the time to vet the network‑boot docs. 🙏
- El_isra — @israpps — maintains the canonical udpbd-server on GitHub (Rick's code, with CI), which is the reference we ported from.
- Alex Parrado — the Windows port of udpbd-server.
- snapsapnap2 — @snapsapnap2 — proposed CHD over SMBv1 and wrote the first version (#308), which the opt-in SMBv1 Decompress CHD/CSO option grew from.
- Aerosol — tested UDPFS across Linux, Windows, and direct connections, identified the explicit-bind workaround, and isolated a shared-config line-ending issue affecting VMC paths.
- Ronnie Sahlberg — @sahlberg — author of
unfs4, the PS2 NFS client in RiptOPL's NFS
protocol, Neutrino's NFS mode
(ps2max32/neutrino PR #240) and
Launchstation's
nfs:driver, which the NFS card serves; of usmb2, the SMB client in Neutrino's SMB mode (ps2max32/neutrino PR #236), which the SMBv3 card serves, and in thesmb2mandriver RiptOPL and Launchstation browse SMB2/3 shares with; and of libsmb2. Our NFS and SMB conformance tests build unfs4, usmb2 and libsmb2 and run them against our servers. - Open PS2 Loader and the ps2homebrew team — the loader everything here serves, and the wider toolchain that makes PS2 homebrew possible.
- prodeveloper0/pyudpbd — a pure‑Python UDPBD port we read while writing our own.
- The folks behind CHD (libchdr / MAME), CSO, and ZSO — the compressed‑image formats UDPFS decompresses on the fly.
- v_txl (Discord) — for dedicated testing and hardware validation of Modulo UDPFS mode and direct ethernet link connectivity.
What's original here
The GUI launcher, the SMBv1 server, the NFS 4.0 server and the pure‑Python UDPBD port were written for this repo. Everything at the protocol level is the community's — we reimplemented from public protocols/source (rather than copying code) where we could, and tried to attribute accurately.