anchor.diff:  This guide covered the creation of a native (binary) executable for your application.
   It provides an application exhibiting a swift startup time and consuming less memory.
   However, there is much more.
  +
   We recommend continuing the journey with the link:kubernetes-guide.html[deployment to Kubernetes and OpenShift].
  
positive.code: This guide covers:
  
  * Compiling the application to a native executable
  * The packaging of the application in a container
  
  This guide takes as input the application developed in the link:getting-started-guide.html[Getting Started Guide].
  
  
negative.code: * less than 15 minutes
  * an IDE
  * JDK 1.8+ installed with `JAVA_HOME` configured appropriately
  * A xref:configuring-c-development[working C development environment]
  * GraalVM version {graalvm-version} installed and  xref:configuring-graalvm[configured appropriately]
  * A working container runtime (Docker, podman)
  * The code of the application developed in the link:getting-started-guide.html[Getting Started Guide].
  
  .Supporting native compilation in C
  [[configuring-c-development]]
  [NOTE]
  ====
  What does having a working C developer environment mean?
  
  * On Linux, you will need GCC, and the glibc and zlib headers. Examples for common distributions:
  +
  [source,shell]
  ----
  # dnf (rpm-based)
  sudo dnf install gcc glibc-devel zlib-devel
  # Debian-based distributions:
  sudo apt-get install build-essential libz-dev
  ----
  * XCode provides the required dependencies on macOS:
  +
  [source,shell]
  ----
  xcode-select --install
  ----
  ====
  
  [[configuring-graalvm]]
  === Configuring GraalVM
  
  [TIP]
  ====
  If you cannot install GraalVM, you can use a multi-stage Docker build to run Maven inside a Docker container that embeds GraalVM. There is an explanation of how to do this at the end of this guide.
  ====
  
  Version {graalvm-version} is required. Using the community edition is enough.
  
  1. Install GraalVM if you haven't already. You have a few options for this:
  ** Use platform-specific install tools like https://github.com/graalvm/homebrew-tap[homebrew] or https://sdkman.io/jdks#Oracle[sdkman].
  ** Download the appropriate Community Edition archive from <https://github.com/oracle/graal/releases>, and unpack it like you would any other JDK.
  2. Configure the runtime environment. Set `GRAALVM_HOME` environment variable to the GraalVM installation directory, for example:
  +
  [source,shell]
  ----
  export GRAALVM_HOME=$HOME/Development/graalvm/
  ----
  +
  On macOS, point the variable to the `Home` sub-directory:
  +
  [source,shell]
  ----
  export GRAALVM_HOME=$HOME/Development/graalvm/Contents/Home/
  ----
  3. Install the `native-image` tool using `gu install`:
  +
  [source,shell]
  ----
  ${GRAALVM_HOME}/bin/gu install native-image
  ----
  +
  Some previous releases of GraalVM included the `native-image` tool by default.  This is no longer the case; it must be installed as a second step after GraalVM itself is installed. Note: there is an outstanding issue xref:graal-and-catalina[using GraalVM with macOS Catalina].
  4. (Optional) Set the `JAVA_HOME` environment variable to the GraalVM installation directory.
  +
  [source,shell]
  ----
  export JAVA_HOME=${GRAALVM_HOME}
  ----
  5. (Optional) Add the GraalVM `bin` directory to the path
  +
  [source,shell]
  ----
  export PATH=${GRAALVM_HOME}/bin:$PATH
  ----
  
  [[graal-and-catalina]]
  .Issues using GraalVM with macOS Catalina
  [NOTE]
  ====
  GraalVM binaries are not (yet) notarized for macOS Catalina as reported in this https://github.com/oracle/graal/issues/1724[GraalVM issue]. This means that you may see the following error when using `gu`:
  
  ----
  “gu” cannot be opened because the developer cannot be verified
  ----
  
  Use the following command to recursively delete the `com.apple.quarantine` extended attribute on the GraalVM install directory as a workaround:
  
  [source,shell]
  -----
  xattr -r -d com.apple.quarantine ${GRAALVM_HOME}
  -----
  ====
  
  == Solution
  
  We recommend that you follow the instructions in the next sections and package the application step by step. However, you can go right to the completed example.
  
  Clone the Git repository: `git clone {quickstarts-clone-url}`, or download an {quickstarts-archive-url}[archive].
  
  