
# bp3d-os
Operating system tools for BlockProject 3D.
This crate provides various platform specific tools to use by most BlockProject 3D software.
## Features
- **assets** provides access to files bundled within the application (eg: AppImage for Linux and Application bundles
for Apple systems).
- **dirs** provides access to various system directories to place application data, logs, config, etc.
- **fs** provides a few utilities to extend the Rust standard library around the platform file system such as managing
hidden files or getting the absolute path of a file or directory.
- **open** provides utilities to open URLs and files using the default registered application.
## Supported platforms
Currently, the following platforms are supported:
- macOS.
- macOS (with App sandbox).
- iOS.
- Linux.
- Windows.
- Other BSD like systems.
Support for Android is currently not planned due to drastic restrictions on file sizes and largely increased complexity
of interacting with the platform (No native C API, everything goes through JVM with some custom main function).
### Support for the *assets* feature
| macOS | Yes | Uses NSBundle API. |
| macOS (with app sandbox) | Yes | Uses NSBundle API. |
| iOS | Yes | Uses NSBundle API. |
| Linux | Yes | - |
| Windows | No | Uses GetModuleFileNameW. |
| Other BSD like systems | No | - |
### Support for the *dirs* feature
| macOS | Yes | Uses NSFileManager API. |
| macOS (with app sandbox) | Yes | Uses NSFileManager API. |
| iOS | Yes | Uses NSFileManager API. |
| Linux | Yes | - |
| Windows | No | Uses SHGetKnownFolderPath. |
| Other BSD like systems | Yes | - |
### Support for the *fs* feature
| macOS | Yes | Uses NSFileManager API. |
| macOS (with app sandbox) | Yes | Uses NSFileManager API. |
| iOS | Yes | Uses NSFileManager API. |
| Linux | Yes | - |
| Windows | No | - |
| Other BSD like systems | Yes | - |
### Support for the *open* feature
| macOS | Yes | Uses NSWorkspace API. |
| macOS (with app sandbox) | Yes | Uses NSWorkspace API. |
| iOS | No | Not yet implemented. |
| Linux | Yes | Uses dbus and xdg-open. |
| Windows | Yes | Uses ShellExecuteW. |
| Other BSD like systems | No | Uses the same code as Linux. |
### Support for the *env* feature
No platform specific APIs are required for this feature except support for
environment variables which is usually missing from mobile platforms.
| macOS | Yes | - |
| macOS (with app sandbox) | Yes | - |
| iOS | No | Not applicable |
| Linux | Yes | - |
| Windows | Yes | - |
| Other BSD like systems | No | - |
### Support for the *cpu-info* feature
| macOS | Yes | Uses `machdep.cpu.core_count` and `machdep.cpu.brand_string`. |
| macOS (with app sandbox) | Yes | Same as macOS. |
| iOS | Yes | Same as macOS. |
| Linux | Yes | Uses `raw_cpuid` on x86_64, None on other architectures. |
| Windows | Yes | Uses `raw_cpuid` on x86_64, None on other architectures. |
| Other BSD like systems | Yes | Uses `hw.ncpu` and `hw.model`. |
### Support for the *time* feature
| macOS | Yes | Reads and interprets the contents of `/etc/localtime`. |
| macOS (with app sandbox) | No | Same as macOS. |
| iOS | Yes | Same as macOS. |
| Linux | No | Same as macOS. |
| Windows | Yes | Uses `GetTimeZoneInformation`. |
| Other BSD like systems | No | Same as macOS. |