Preserve is designed to work across Windows, Linux, and macOS. This document covers platform-specific details, known quirks, and testing status.
| Platform | Status | Tested | Notes |
|---|---|---|---|
| Windows 10/11 | Supported | Yes | Primary development platform |
| Linux (Ubuntu, Debian, etc.) | Supported | Yes | Tested on Ubuntu 22.04+ |
| macOS | Supported | Community | Needs more testing - help wanted |
| BSD (FreeBSD, OpenBSD) | Unknown | No | Likely works - help wanted |
| WSL/WSL2 | Supported | Yes | Works with Windows paths |
- Junctions: Windows NTFS junctions are detected and handled during MOVE operations
- Drive Letters: Absolute path mode (
--abs) preserves drive letters as directories (e.g.,C:\data\file.txt→backup/C/data/file.txt) - Long Paths: Supports Windows long paths (260+ characters) when enabled in Windows settings
- Permissions: File permissions are preserved where possible; some attributes require administrator privileges
- Symlinks: Symbolic links are detected during cycle detection
- Permissions: Full POSIX permission preservation (owner, group, mode)
- Case Sensitivity: Filesystem is typically case-sensitive; preserve respects this
- Symlinks: Should work like Linux symlinks
- Case Sensitivity: Default HFS+/APFS is case-insensitive but case-preserving
- Extended Attributes: Resource forks and extended attributes may need additional handling
Note: macOS support is based on code compatibility with Linux. We welcome testing and feedback from macOS users.
- Expected Behavior: Should work similarly to Linux
- Untested: No direct testing has been performed
| Scenario | Windows | Linux/macOS |
|---|---|---|
| Path separator | \ (backslash) |
/ (forward slash) |
| Drive letters | C:\, D:\, etc. |
N/A (mount points) |
| Root path | C:\ |
/ |
| Home directory | %USERPROFILE% |
~ or $HOME |
Preserve normalizes paths internally and handles cross-platform path differences automatically.
| Feature | Windows Junction | Windows Symlink | Unix Symlink |
|---|---|---|---|
| Target type | Directory only | File or directory | File or directory |
| Admin required | No | Yes (or Developer Mode) | No |
| Relative targets | No | Yes | Yes |
| Cross-volume | No | Yes | Yes |
Preserve's --link-handling flag works with all link types.
pip install dazzle-preserve[windows]The [windows] extra includes pywin32 for enhanced Windows functionality.
pip install dazzle-preservepip install dazzle-preserve[dazzlelink]We'd love help testing preserve on platforms we don't have regular access to:
- macOS (Intel and Apple Silicon)
- BSD variants (FreeBSD, OpenBSD, NetBSD)
- Other Linux distributions
- ARM-based systems
- Install preserve on your platform
- Run some basic operations:
# Create a test directory with some files mkdir -p test-src/subdir echo "test" > test-src/file.txt echo "nested" > test-src/subdir/nested.txt # Test COPY with verification preserve COPY test-src/ --dst test-backup/ --rel --includeBase -r --hash SHA256 # Test VERIFY preserve VERIFY --src test-src/ --dst test-backup/ --hash SHA256 # Test RESTORE preserve RESTORE --src test-backup/ --dst test-restored/ # Compare results diff -r test-src/ test-restored/test-src/
- Share your results in our Platform Testing Discussion
- Operating system and version
- Python version (
python --version) - Preserve version (
preserve --version) - Any errors or unexpected behavior
- Whether all basic operations worked
- Python Downloads - Get Python for your platform
- Windows Terminal - Modern terminal for Windows
- Homebrew - Package manager for macOS (useful for Python)
- CLI Reference - Full command documentation
- GitHub Discussions - Community support
- GitHub Issues - Bug reports and feature requests