.. _man-handling-operating-system-variation: ************************************* Handling Operating System Variation ************************************* When dealing with platform libraries, it is often necessary to provide special cases for various platforms. The variable ``Sys.KERNEL`` can be used to write these special cases. There are several functions intended to make this easier: ``is_unix``, ``is_linux``, ``is_apple``, ``is_bsd``, and ``is_windows``. These may be used as follows:: if is_windows() some_complicated_thing(a) end Note that ``is_linux`` and ``is_apple`` are mutually exclusive subsets of ``is_unix``\ . Additionally, there is a macro ``@static`` which makes it possible to use these functions to conditionally hide invalid code, as demonstrated in the following examples. Simple blocks:: ccall( (@static is_windows() ? :_fopen : :fopen), ...) Complex blocks:: @static if is_linux() some_complicated_thing(a) else some_different_thing(a) end When chaining conditionals (including if/elseif/end), the ``@static`` must be repeated for each level (parentheses optional, but recommended for readability):: @static is_windows() ? :a : (@static is_apple() ? :b : :c)