user5261: I am starting the Pioneer program by setting up the development environment. There are several ways to do that, I think 4!
At the end the two that seems to me more appealing are the one using nix or the one using docker.
The former complex but allows you to create an environment that is more up-to-date.
The latter is more easy (at least for me) and less time consuming.
Is there any real advantage to use the former?
Can we encounter some limitation by following the latter?

user5537: I agree that Nix is the way to go as it will give you the same processes the Plutus educators and devs are working in. Be sure to follow the instructions offered after the webportal went down.
I went with the canonical plutus-apps repo build for the playground. It is the 3rd option off of the document shared after the portal dropped:
**[Plutus Env: Setup Starter Pack].**

BTW, I am using ubuntu 21.04. I have also done the same install on a straight debian build. Sometime over the next couple days I will do the build on my Win10 laptop (dual booting with the Ubuntu).
I hope this helps & Good luck!

user2186: Indeed. I would prefer using Linux, Ubuntu. Saves you lots of time. You can run it together with a windows installation. Building the shell with Nix is the way to go. I have set up instructions over here .. also Mac and Windows.
https://drive.google.com/file/d/1u6QDsZCPnZQ_QiV8hBihgfFh82iTFs7M/view

user907: Typically the team loads all new working code to the Nix container. Additionally, it is more compatible with Haskell/Plutus because it is also written under functional paradigm. I tend to suggest everyone using Nix, once you get familiar everything flows smoothly.
You should check at this set up from the First iteration (for your preferred OS):
https://docs.plutus-community.com/docs/setup/Ubuntu.html
Note that the lectures are outdated but the set up is the same

user6001: I'm afraid that there are more than 4 ways to setup an environment to follow the Plutus Pioneer Program, considering all the combinations of operating systems, virtualization options and application packaging.
The first thing to decide is if we're going to use some kind of virtualization technology to isolate the environment. In my experience this is highly recommended because:

you avoid possible incompatibilities with your host operating system and any already installed software, specially on development systems with many package managers deployed.
it keeps your host clean so you can easily start over from a clean state if things go wrong.
it allows you to choose a base system that is known to work well independently from your host system.
it creates a certain degree of independence from the physical layer (depending on the technology used), to the point where you may decide to setup the exact same environment in the cloud as you don't have the free resources needed in your local computer.

Now, you have two main options to virtualize the environment, a Docker container or a virtual machine.

The Docker option requires that, after installing the software, you run an image that someone has previously built (quick and reproducible option), or that you build it yourself using a Dockerfile. In my opinion it may make sense if someone is maintaining images for each week's environment version, with everything already compiled, aiming to save some time, otherwise a virtual machine can offer more flexibility for this use case, persisting changes without much overhead, and allowing to experiment in a more comfortable way.

The virtual machine option requires that you install a virtualization software, for example Virtualbox, to deploy a local instance, or that you deploy a cloud instance, for example an AWS EC2, and then that you choose/install your preferred operating system, and finally on top of that install the toolset required to compile the Plutus environment. This can be a bit confusing the first time if you're not used to the tools, i.e. nix, cabal, etc...


Be aware that in previous iterations we needed to weekly recompile the environment to make the code samples work, as a consequence of the Playground being under heavy development.
Fortunately the community made an effort to further document the process for a variety of scenarios, and made it available at the website:
https://docs.plutus-community.com/
https://plutus-community.readthedocs.io/
Please consider contributing to the following repository:
https://github.com/input-output-hk/plutus-community
There's an option that in my opinion takes the best of both worlds for this use case, which is to make use of Vagrant to get a running virtual machine but automating all the initial setup process. You can find instructions on the previous links for a Vagrant+Ubuntu setup.
I wanted to use Vagrant+NixOS for its deterministic nature and its native integration with part of the required toolset, so I developed a Vagrant file and a set of scripts to automate the setup process that can be found here:
https://github.com/jmhoms/plutus-pioneer-nixos-vagrant
I plan to follow this third iteration that is about to start, and I'll try to update the scripts as the course moves forward.
I hope this helps.
Cheers!
Josep

5261: <p>I am starting the Pioneer program by setting up the development environment. There are several ways to do that, I think 4!</p>
<p>At the end the two that seems to me more appealing are the one using nix or the one using docker.</p>
<p>The former complex but allows you to create an environment that is more up-to-date.
The latter is more easy (at least for me) and less time consuming.</p>
<p>Is there any real advantage to use the former?
Can we encounter some limitation by following the latter?</p>
 5537: <p>I agree that Nix is the way to go as it will give you the same processes the Plutus educators and devs are working in. Be sure to follow the instructions offered after the webportal went down.</p>
<p>I went with the canonical <code>plutus-apps repo</code> build for the playground. It is the 3rd option off of the document shared after the portal dropped:</p>
<pre><code>**[Plutus Env: Setup Starter Pack].**
</code></pre>
<p>BTW, I am using <code>ubuntu 21.04</code>. I have also done the same install on a straight debian build. Sometime over the next couple days I will do the build on my Win10 laptop (dual booting with the Ubuntu).</p>
<p><em>I hope this helps &amp; Good luck!</em></p>
 2186: <p>Indeed. I would prefer using Linux, Ubuntu. Saves you lots of time. You can run it together with a windows installation. Building the shell with Nix is the way to go. I have set up instructions over here .. also Mac and Windows.</p>
<p><a href="https://drive.google.com/file/d/1u6QDsZCPnZQ_QiV8hBihgfFh82iTFs7M/view" rel="nofollow noreferrer">https://drive.google.com/file/d/1u6QDsZCPnZQ_QiV8hBihgfFh82iTFs7M/view</a></p>
 907: <p>Typically the team loads all new working code to the Nix container. Additionally, it is more compatible with Haskell/Plutus because it is also written under functional paradigm. I tend to suggest everyone using Nix, once you get familiar everything flows smoothly.</p>
<p>You should check at this set up from the First iteration (for your preferred OS):</p>
<p><a href="https://docs.plutus-community.com/docs/setup/Ubuntu.html" rel="nofollow noreferrer">https://docs.plutus-community.com/docs/setup/Ubuntu.html</a></p>
<p>Note that the lectures are outdated but the set up is the same</p>
 6001: <p>I'm afraid that there are more than 4 ways to setup an environment to follow the Plutus Pioneer Program, considering all the combinations of operating systems, virtualization options and application packaging.</p>
<p>The first thing to decide is if we're going to use some kind of virtualization technology to isolate the environment. In my experience this is highly recommended because:</p>
<ul>
<li>you avoid possible incompatibilities with your host operating system and any already installed software, specially on development systems with many package managers deployed.</li>
<li>it keeps your host clean so you can easily start over from a clean state if things go wrong.</li>
<li>it allows you to choose a base system that is known to work well independently from your host system.</li>
<li>it creates a certain degree of independence from the physical layer (depending on the technology used), to the point where you may decide to setup the exact same environment in the cloud as you don't have the free resources needed in your local computer.</li>
</ul>
<p>Now, you have two main options to virtualize the environment, a Docker container or a virtual machine.</p>
<ul>
<li><p>The Docker option requires that, after installing the software, you run an image that someone has previously built (quick and reproducible option), or that you build it yourself using a Dockerfile. In my opinion it may make sense if someone is maintaining images for each week's environment version, with everything already compiled, aiming to save some time, otherwise a virtual machine can offer more flexibility for this use case, persisting changes without much overhead, and allowing to experiment in a more comfortable way.</p>
</li>
<li><p>The virtual machine option requires that you install a virtualization software, for example Virtualbox, to deploy a local instance, or that you deploy a cloud instance, for example an AWS EC2, and then that you choose/install your preferred operating system, and finally on top of that install the toolset required to compile the Plutus environment. This can be a bit confusing the first time if you're not used to the tools, i.e. nix, cabal, etc...</p>
</li>
</ul>
<p>Be aware that in previous iterations we needed to weekly recompile the environment to make the code samples work, as a consequence of the Playground being under heavy development.</p>
<p>Fortunately the community made an effort to further document the process for a variety of scenarios, and made it available at the website:</p>
<p><s>https://docs.plutus-community.com/</s></p>
<p><a href="https://plutus-community.readthedocs.io/" rel="nofollow noreferrer">https://plutus-community.readthedocs.io/</a></p>
<p>Please consider contributing to the following repository:</p>
<p><a href="https://github.com/input-output-hk/plutus-community" rel="nofollow noreferrer">https://github.com/input-output-hk/plutus-community</a></p>
<p>There's an option that in my opinion takes the best of both worlds for this use case, which is to make use of Vagrant to get a running virtual machine but automating all the initial setup process. You can find instructions on the previous links for a Vagrant+Ubuntu setup.</p>
<p>I wanted to use Vagrant+NixOS for its deterministic nature and its native integration with part of the required toolset, so I developed a Vagrant file and a set of scripts to automate the setup process that can be found here:<br />
<a href="https://github.com/jmhoms/plutus-pioneer-nixos-vagrant" rel="nofollow noreferrer">https://github.com/jmhoms/plutus-pioneer-nixos-vagrant</a></p>
<p>I plan to follow this third iteration that is about to start, and I'll try to update the scripts as the course moves forward.</p>
<p>I hope this helps.</p>
<p>Cheers!
Josep</p>
