A virtualização é de longe a mais simples.
No entanto, você tem dois casos de uso separados aqui, que terão soluções diferentes
1. Experimente a nova distro
As distribuições são basicamente determinadas pelos aplicativos empacotados e pelo ambiente userspace (por exemplo, SystemD
vs init
para inicialização)
Se você quer "avaliar" o UIX de uma distribuição diferente, qualitativamente, então eu recomendo a virtualização completa onde você instala o sistema operacional em sua totalidade e avalia sua usabilidade. Isso é coberto adequadamente em outras respostas.
Se você simplesmente precisar do ambiente do espaço de usuário para testar, leia.
2. Testes e "instâncias descartáveis" em diferentes ambientes
É mais fácil, mais barato e mais rápido usar a conteinerização, uma forma de virtualização leve que usa o kernel para criar ambientes em área restrita.
Um contêiner compartilha recursos do kernel com o Host, mas tem seu próprio sistema de arquivos raiz, userspace, pilha de rede, etc. Isso pode ser considerado, conceitualmente, como chroot
em esteróides. No entanto, como o kernel é compartilhado, a virtualização é "thin", o que significa que, para a maioria das finalidades práticas, ele é executado na mesma velocidade que o sistema operacional host.
Existe um sistema de contêiner comumente usado chamado docker
. O Docker padronizou imagens para praticamente todas as distribuições de linux que você gostaria, e ele é executado no windows (no entanto, as imagens do windows só funcionam no windows, as imagens linux funcionam em ambos). Possui recursos úteis adicionais para economizar espaço e desempenho.
Existem também alternativas nativas de código aberto para o Linux como LXC
(que é embutido no kernel!), que podem ser usadas da mesma forma (mas com mais configurações necessárias).
Exemplo simplificado de um ambiente de teste ou de compilação em docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
-
docker build --tag my-builder .
Em seguida, na linha de comando, compile seu projeto ou testes nesse ambiente de várias formas
"login" e compile dentro do ambiente, execute testes, etc. Assumindo que você está no diretório fonte do seu projeto
$ docker run -v "$PWD:/workdir" --rm -it my-builder /bin/bash
# echo "Now in docker container"
# make
...
# build/test/my-test
...
# exit
$ echo "Build artifacts are now on your host OS Directory :) "
Use como único
$ docker run -v "$PWD:/workdir" --rm my-builder make
Você pode até passar variáveis de ambiente
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Ou inicie uma instância persistente e copie arquivos para ela explicitamente
$ Start our instance in background
$ docker run --name my-builder-inst -d my-builder
$ echo "Copy files to instance"
$ docker cp /my/source/dir my-builder-inst:/workdir
$ echo "run project build"
$ docker exec my-builder-inst make
$ echo "copy build artifacts"
$ docker cp my-builder-inst:/workdir/build /my/output/dir
$ echo "destroy and delete container"
$ docker rm -f my-builder-inst
Existem literalmente centenas de outros padrões de uso, no entanto, a definição de imagem semelhante a um script, imagens extensíveis e uso de linha de comando a tornam extremamente atraente para ambientes de desenvolvimento, teste e até mesmo de implementação