# Nix

[*Nix*][nix] can be a somewhat confusing term because it refers to multiple things:

1. The pure and functional [programming language][lang]
2. The [Nix CLI](#cli)
3. The overall Nix [package management system][package-management]

All of these are closely interrelated and should be thought of as a single tool.
In this document, we'll go over each of these three aspects of Nix.

<Admonition info open title="Nix and open source" id="nix-oss">
The Nix project is fully open source and largely developed within the [`NixOS`][nixos-org] organization on [GitHub].
It's licensed under [LGPL 2.1][license], which is generally quite permissive regarding commercial use.

We at Determinate Systems have actively contributed to Nix as an open source project in the past&mdash;alongside countless talented individuals&mdash;and will continue to do so as part of our [mission] to make Nix better.
We have also created [Determinate Nix][det-nix], a downstream distribution of Nix intended for enterprise.
</Admonition>

## The Nix CLI \{#cli}

There are two different Nix CLIs currently active:

- The [unified Nix CLI](#unified-cli) is currently experimental but, from the standpoint of [Determinate Systems][ds], recommended for using Nix.
  It wraps all Nix functionality into a single `nix` executable and supports [flakes]
- The [original Nix CLI](#original-cli), which is currently standard but, from the standpoint of [Determinate Systems][ds], _not_ recommended for using Nix.

### The unified CLI \{#unified-cli}

The _unified CLI_ is a still-experimental way of using Nix that involves just one executable called `nix`.
_All_ Nix functionality is wrapped into this tool, including commands like `nix build` for building [packages] instead of the old `nix-build` tool, `nix develop` for activating Nix [development environments][env] instead of the old `nix-shell` tool, `nix store` for managing the [Nix store][store] instead of the old `nix-store` tool, and more.
Because the unified CLI isn't yet official, it needs to be explicitly enabled in your Nix configuration by adding `nix-command` to your `experimental-features` list.

We won't cover setting up the unified CLI here because the [Determinate Nix Installer][install] both installs it and enables it in your Nix configuration.

### The original CLI \{#original-cli}

The _original CLI_ for Nix is still the official CLI but, as we mention above, not recommended for new Nix users for two reasons:

1. It's incompatible with [Nix flakes][flakes] as it was created before the inception of flakes.
1. It presents significant cognitive overhead in comparison with the [unified CLI](#unified-cli) because it requires you to learn a wide variety of CLI tools, including `nix-build` for building [packages], `nix-shell` for Nix [development environments][env], `nix-store` for managing the [Nix store][store], and several more.

The [Determinate Nix Installer][install] enables the [unified CLI](#unified-cli) by default, but leaves the tools from the original CLI accessible.

[det-nix]: https://docs.determinate.systems/determinate-nix
[ds]: https://determinate.systems
[env]: /concepts/dev-env
[flakes]: /concepts/flakes
[github]: https://github.com
[install]: /concepts/nix-installer
[lang]: /concepts/nix-language
[license]: https://github.com/nixOS/nix?tab=LGPL-2.1-1-ov-file
[mission]: https://determinate.systems/posts/we-want-to-make-nix-better
[nix]: https://nixos.org
[nixos-org]: https://github.com/NixOS
[packages]: /concepts/packages
[package-management]: /concepts/package-management
[store]: /concepts/nix-store