05nelsonm / kmp-tor-resource

Tor resources for kmp-tor
Apache License 2.0
3 stars 0 forks source link

kmp-tor-resource

badge-license badge-latest-release

badge-kotlin badge-build-env badge-kmp-tor-common

badge-platform-android badge-platform-jvm badge-platform-js-node badge-platform-linux badge-platform-ios badge-platform-macos badge-platform-windows badge-support-apple-silicon badge-support-js-ir badge-support-linux-arm

This project is focused on the packaging and distribution of pre-compiled tor resources for Kotlin Multiplatform, primarily to be consumed as a dependency for kmp-tor.

Build Reproducibility

See DETERMINISTIC_BUILDS.md

Compilations

Tor and its dependencies are compiled from source using the following versions

git tag
libevent release-2.1.12-stable
openssl openssl-3.2.2
tor tor-0.4.8.12
xz v5.6.2
zlib v1.3.1

NOTE: All macOS and Windows compilations are code signed so they work out of the box.

More details about how things are compiled can be found HERE

Jvm/Node.js Supported Operating Systems & Architectures

x86 x86_64 armv7 aarch64 ppc64
Windows
macOS
Linux (android)
Linux (libc)
Linux (musl)
FreeBSD

Types (exec & noexec)

2 types of resources are available; exec and noexec. This is to support platforms where process execution is not allowed (e.g. iOS).

Even though tremendous work has gone into making the noexec dependencies as safe as possible by unloading tor after each invocation of tor_run_main, there is no safer way to run tor than in its own process (as it was designed). The exec dependency should be utilized whenever possible.

Variants (tor & tor-gpl)

2 variants of tor are compiled; 1 with the flag --enable-gpl, and 1 without it.

Publications with the -gpl suffix are indicative of the presence of the --enable-gpl compile time flag.

Both variants are positionally identical with the same package names, classes, resource names/locations, etc. The only difference between them are the compilations of tor being provided.

Only 1 variant can be had for a project, as a conflict will occur if both are present.

Example `build.gradle.kts` ```kotlin // BAD dependencies { implementation("io.matthewnelson.kmp-tor:resource-exec-tor:$vKmpTorResource") implementation("io.matthewnelson.kmp-tor:resource-exec-tor-gpl:$vKmpTorResource") } // BAD dependencies { implementation("io.matthewnelson.kmp-tor:resource-exec-tor:$vKmpTorResource") implementation("io.matthewnelson.kmp-tor:resource-noexec-tor-gpl:$vKmpTorResource") } // GOOD! (non-gpl) dependencies { implementation("io.matthewnelson.kmp-tor:resource-exec-tor:$vKmpTorResource") implementation("io.matthewnelson.kmp-tor:resource-noexec-tor:$vKmpTorResource") } // GOOD! (gpl) dependencies { implementation("io.matthewnelson.kmp-tor:resource-exec-tor-gpl:$vKmpTorResource") implementation("io.matthewnelson.kmp-tor:resource-noexec-tor-gpl:$vKmpTorResource") } ```

This is to respect the GPL licensed code tor is utilizing such that projects who have a GPL license are able to take advantage of the new functionality, and projects who do not have a GPL license can still utilize tor without infringing on the license.

Usage

Currently, there is only a SNAPSHOT publication in order to work on kmp-tor 2.0.0. Once that work is complete a Release will be made for kmp-tor-resource.