---
title: "Using the Linux VM execution environment"
description: "Learn how to configure your jobs to run in the Linux VM execution environment using the machine executor."
platform: "Cloud, Server"
doc_version: "Server"
last_updated: "2026-10-26"
---

> For current CircleCI product defaults, deprecated patterns, and Cloud/Server differences, see [AGENTS.md](https://circleci.com/docs/AGENTS.md).
>
> For the complete documentation index and site structure, see [llms.txt](https://circleci.com/docs/llms.txt).

# Using the Linux VM execution environment

Using the machine executor gives your application full access to OS resources and provides you with full control over the job environment. This control can be useful when you need full access to the network stack. For example, you can listen on a network interface or change the system with `sysctl` commands.

To use the machine executor, use the [`machine` key](https://circleci.com/docs/reference/configuration-reference/#machine) in your job configuration and specify an image:

<Tabs>
<Tab title="Cloud">

```yaml
version: 2.1
jobs:
  my-job:
    machine:
      image: ubuntu-2604:current
    resource_class: large.gen2
```

</Tab>
<Tab title="Server">

```yaml
version: 2.1
jobs:
  my-job:
    machine:
      image: default
    resource_class: large
```

</Tab>
</Tabs>

Your system administrator manages the available Linux images.

On CircleCI Server, `machine: true` also works as shorthand for `machine` with `image: default`.

## Available LinuxVM resource classes

### Gen1

| Class | vCPUs | RAM | Disk Size | Cloud | Server |
| --- | --- | --- | --- | --- | --- |
| `medium` | 2 | 7.5 GB | 150GB | **Yes** | **Yes** |
| `large` | 4 | 15 GB | 150GB | **Yes** | **Yes** |
| `xlarge` | 8 | 32 GB | 150GB | **Yes** | **Yes** |
| `2xlarge` | 16 | 64 GB | 150GB | **Yes** | **Yes** |
| `2xlarge+` | 32 | 64 GB | 150GB | **Yes** | **Yes** |

### View resource usage

To view the compute resource usage for the duration of a job in the CircleCI web app:

1.  In the CircleCI web app, select your org from the org cards on your user homepage.
    
2.  Select **Pipelines** from the sidebar and locate your pipeline from the list. You can use the project, branch, date, and status search options to help.
    
3.  Select the job you want to access by selecting the job name.
    
4.  Select the **Resources** tab to view CPU and RAM usage for the duration of the job.
    

You can use these insights to decide whether to make changes to the job’s configured resource class.

> **Image:** Resources tab

Figure 1. Resources tab in web app for a job

## Pre-installed software

You can find the most up-to-date list of pre-installed software on the [Discuss](https://discuss.circleci.com/tag/machine-images) page.

If you are already using an image, you can verify all the packages that come pre-installed. Run the `apt list --installed` command as a step, like in the example below:

```yaml
version: 2.1
...
jobs:
  whats-installed:
    machine: # executor type
      image: default
    steps:
      - run: apt list --installed
...
```

You can install additional packages with `sudo apt-get install <package>`. If the package is not found, run `sudo apt-get update` before installing it.

## Use machine with Docker

Using the machine executor also means that you get full access to the Docker process. This allows you to run privileged Docker containers and build Docker images.

The following example uses an image and enables [Docker Layer Caching](https://circleci.com/docs/guides/server/optimize/docker-layer-caching/) (DLC) which is useful when you are building Docker images during your jobs.

```yaml
machine:
  image: default
  docker_layer_caching: true    # default - false
```

## Next steps

To find out about migrating a project from using the Docker executor to using `machine`, see the [Executor Migration](https://circleci.com/docs/guides/server/execute/docker-to-machine/) from Docker to Machine document.