# Architecture

This page aims to give a short technical overview of the architecture of OSCAR. A more in-depth overview of the various components of OSCAR is given on the OSCAR homepage.

## Julia packages

OSCAR is developed as a pure julia package Oscar.jl and builds on the features and interfaces provided by the julia packages for the cornerstones:

The packages are integrated into the julia package manager and will be installed automatically as dependencies of OSCAR. They can be accessed directly by their names once OSCAR is loaded.

The current versions of these packages can be inspected with the Oscar.versioninfo command:

julia> Oscar.versioninfo()OSCAR version 0.11.2
combining:
AbstractAlgebra.jl   v0.27.7
GAP.jl               v0.9.2
Hecke.jl             v0.16.5
Nemo.jl              v0.32.5
Polymake.jl          v0.8.3
Singular.jl          v0.14.0

## Binary packages for non-julia libraries

In addition to the pure julia packages, OSCAR builds on many non-julia libraries for the cornerstones (FLINT, GAP, polymake, Singular) and their dependencies.

Both Polymake.jl and Singular.jl use CxxWrap.jl together with the corresponding libcxxwrap-julia library as an intermediate layer between the julia packages and the C / C++ libraries.

All dependencies have been integrated into the BinaryBuilder ecosystem which provides precompiled binaries for all supported architectures. The build-recipes are maintained in julia's Yggdrasil repository. These are used to automatically build binary artifacts together with the corresponding jll packages which allow automatic installation of all required binaries as dependencies for OSCAR.

The binary packages can be found under the JuliaBinaryWrappers organization. Each repository has an autogenerated Readme file which gives some details on the original sources, supported platforms, and dependencies.

The Oscar.versioninfo function can also include the versions of all binary packages that are maintained by the OSCAR developers:

julia> Oscar.versioninfo(jll=true)OSCAR version 0.11.2
combining:
AbstractAlgebra.jl   v0.27.7
GAP.jl               v0.9.2
Hecke.jl             v0.16.5
Nemo.jl              v0.32.5
Polymake.jl          v0.8.3
Singular.jl          v0.14.0
building on:
Antic_jll               v0.201.500+0
Arb_jll                 v200.2300.0+0
Calcium_jll             v0.401.100+0
FLINT_jll               v200.900.1+0
GAP_jll                 v400.1200.102+0
Singular_jll            v403.101.500+0
libpolymake_julia_jll   v0.8.3+1
libsingular_julia_jll   v0.27.0+1
polymake_jll            v400.700.1+1
See ]st -m for a full list of dependencies.

For a full list of all dependencies of the current project please use using Pkg; Pkg.status(mode=PKGMODE_MANIFEST) or the Pkg REPL command ]st -m.

versioninfoFunction
Oscar.versioninfo(io::IO=stdout; branch=false, jll=false, julia=false, commit=false, full=false)

Print the versions of all Oscar-related dependencies.

Arguments

• branch::Bool=false: include git branch name in the output
• commit::Bool=false: include git commit hash and date where applicable
• jll::Bool=false : include binary packages (jll) in the output
• julia::Bool=false : include julia versioninfo output
• full::Bool=false : include all of the above
source