**Note that you also need a working installation if you want to compile BoSSS
from the C# sources yourself.
BoSSS requires a set of prerequisites
(e.g. Microsoft .NET or Mono, MPI, certain _native libraries_)
on a machine, which are set up by the installation
procedure outlined below.**
Within this chapter, we will briefly outline the steps required to get started with using and/or developing BoSSS applications. In any case, the installation of the pre-compiled version of BoSSS [Section 3.1](../Part-I-Getting-Started/3a.-Installation-and-Testing#31-installation) should be the first step. Upon finishing this step, you will be able to use the pre-compiled BoSSS applications [Section 3.3](../Part-I-Getting-Started/3b.-Using-BoSSS-and-Developer#33-using-bosss), but also to start exploring the code using the scripting API. Finally, working with the source code will be discussed in [Section 3.4](../Part-I-Getting-Started/3b.-Using-BoSSS-and-Developer#34-as-a-developer).
## Installation
The advantage of C#, resp. .NET is that _the executable is platform-independent_. This implies that an executable compiled on a Windows/Mac laptop can be copied to a Linux/Unix HPC system and executed there without re-compilation. As discussed in [Section 2.2](../Part-I-Getting-Started/2.-Core-concepts#22-c-net-and-mono), this obviously requires some _middleware_ and some libraries to be present on the target computer. In the following, we will thus summarize some best practices for the installation of the [pre-compiled BoSSS binaries](https://github.com/FDYdarmstadt/BoSSS/releases) on different operating systems.
---
### Windows
To install on Windows, just o execute the BoSSS Windows installer.
Afterwards, you can test installation [Section 3.2](../Part-I-Getting-Started/3a.-Installation-and-Testing#32-testing-the-installation).
The BoSSS installer already includes all required native libraries and prerequisites. These are:
1. Microsoft Visual C++ Redistributable (x64)
2.[Microsoft MPI](https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx). Check the MPI installation by executing the command `mpiexec` in a console window
3. The [.NET framework](https://www.microsoft.com/net/download/framework) is installed
The BoSSS Installer checks whether these components are in place and installs them, if required.
In the case of some problem, one can also download and install these items manually.
---
### Linux
The BoSSS group maintains basic packages of the native libraries listed in [Section 3.2.1](../Part-I-Getting-Started/3a.-Installation-and-Testing#321-third-party-libraries) for Linux. These are compiled against recent versions of the Open MPI and the Intel MKL library and should provide compatibility and decent performance on a variety of systems. However, compatibility this can not guaranteed for any Linux distribution -- binary platform independence in Linux not possible in general; since we use Ubuntu, all Debian derivatives might most likely work. Note further, high-performance computers typically provide specifically optimized versions of BLAS and LAPACK, so for the ultimate performance on a certain system, you'll need to build your own version of the BoSSS native libraries.
The steps for installing BoSSS on Linux are:
1. Obtain [Mono](https://fdy-tuda.openproject.com/www.mono-project.com)(version 6.0 or higher), either by installing a [pre-built package](https://fdy-tuda.openproject.com/www.mono-project.com/download/) or by [compiling](https://fdy-tuda.openproject.com/www.mono-project.com/docs/compiling-mono/linux/) it from a [tarball](https://download.mono-project.com/sources/mono/).
2. Obtain/install/load OpenMPI
3. Obtain/install/load native libraries `libBoSSSnative_seq.so`, `libBoSSSnative_omp.so` and `libBoSSSnative_mpi.so`
* Pre-compiled versions of these shared libraries for Linux can be found in the Windows installation, in the directory `$BOSSS_INSTALL/bin/native/linux/amd64-openmpi`. (There should also be a `zip`\-File that you can unpack on any system.)
* If these pre-build libraries are not compatible with your system (we do our best, but binary compatibility across distributions is quite difficult on Linux), you'll need to compile them yourself, the source code can be found at `https://github.com/FDYdarmstadt/BoSSS-native`resp. `git@github.com:FDYdarmstadt/BoSSS-native.git`.
---
### Mac OS X
Support for Mac OS X will follow soon.
## Testing the Installation
Execute, after the installation the command
```code
BoSSSpad.exe ---check
```
to verify that the installation works and the native libraries are
in place.
Furthermore, check that the environment variable `$BOSSS_INSTALL`
is defined.
The native libraries sould be in the following location
* On Windows: `$BOSSS_INSTALLbin/native/win/amd64`
* On Linux: `$BOSSS_INSTALL/bin/native/linux/amd64-openmpi`
## Notes on Third-party libraries
The pre-compiled native library package already contains the following components:
* required BLAS and LAPACK functionality (from Intel MKL)
* Metis graph partitioning
* Direct sparse solver PARDISO (from Intel MKL)
* Direct sparse solver MUMPS
* Iterative sparse solver HYPRE
* Tecplot IO
* etc. (This list might not be complete and also might change)
Of course, you can compile the third-party libraries yourself,
e.g. to replace the Intel MKL by some other BLAS/LAPACK distribution.
But be aware that it is a tedious process!
The source of those native libraries which are open source can be found at
If you want to use other versions of certain libraries from their original maintainers, be aware that sometimes the API of those might change, which usually yields to a segmentation fault.