Implementation
SEGUL is a compiled, single executable, command-line application with no dependencies. This version supports Windows (native and Windows Subsystem for Linux), MacOS, and Linux. We provide a static executable for old Linux distributions and a dynamically linked executable to GLIBC (https://www.gnu.org/software/libc/) for more optimized performance in newer Linux distributions. Users can install the pre-compiled executable provided in the source code repository or compile the application from the source code (see the Software Availability section below). The latter installation method expands SEGUL platform support to any operating system supported by Rust (https://doc.rust-lang.org/nightly/rustc/platform-support.html). The compiler also fine-tunes the resulting executable for the user’s computer.
The GUI version is written in Dart using the Flutter framework. All expensive computation uses the same Rust code base as our CLI and library. The application is available in beta supporting Windows, MacOS, iOS, iPadOS, and Android. We anticipate future support for Linux. The current version is available to test using Apple TestFlight for iOS, iPadOS, and macOS, and by downloading the application at the GitHub repository page for other operating systems (see Software Availability below). We expect to distribute the stable version via the official store of each operating system, such as AppStore for iOS and PlayStore for Android.
SEGUL is also available as a Rust library (called crates in the Rust programming term), allowing developers to access SEGUL functions through the application programming interface (API). For Rust, the installation process is as easy as typing “cargo add segul” or by manually adding segul as a dependency in the Rust cargo.toml file. The versality of the Rust programming language and the performance of our library will be attractive for usage in slower programming languages (e.g., Python and R). For these languages, programmers can bind SEGUL via the C programming interface. In R and Python, however, Rust support is growing due its value for developing high-performance software without the challenging aspects of C/C++ memory management models. Packages exist to simplify the binding of Rust. In R, programmers can use rextendr package; in Python, PyO3 is available. Python or R code can also interact with the SEGUL CLI using the operating system process. While SEGUL CLI is a single executable with no dependency, for published software, interacting through SEGUL API yields a cleaner application design and avoids common dependency issues, such as improper setup of environment variables. We used a similar approach to develop the GUI version. We provide more detailed instructions in our application documentation (https://docs.page/hhandika/segul-docs/).