All your programming assignments must run on nunki.usc.edu which is a Unix machine running Solaris. In order to get on nunki.usc.edu, you need to ssh into it. Unfortunately, our ssh connection over the campus wireless network can be slow or unreliable. To save frustration, it may be better to develop your work on a Linux machine and occasionally copy your code to nunki.usc.edu to make sure that your code works on both machines.

Please understand that Linux is not Solaris. Your code may work perfectly on Linux but fail to even compile on nunki.usc.edu! Therefore, you must not assume that whatever that works on Linux will work on nunki.usc.edu. The only way to make sure is to do rigorous testing on nunki.usc.edu.

To minimize hardware incompatibility, the best way to run Linux is to install Linux into a virtual machine. This can be a lot of work. Fortunately, there is something called Vagrant that's not too difficult to install. (Although it may not be so easy to use if you are not familiar with the commandline interface of Linux/Unix since its desktop is hidden from you.) Vagrant can work with different virtual machine hypervisor platforms. We will use VirtualBox below since it's available for both Windows and Mac machines.

All examples below will assume that you have a 64-bit machine since it's more common these days. Although inside a virtual machine, we will run a 32-bit Linux system (Ubuntu 16.04) since nunki.usc.edu is a 32-bit machine.

The problem with Windows is that it doesn't run Unix with X11! In order for you to ssh into nunki.usc.edu, you have to use something like X-Win32. You can get X-Win32 from the ITS Software site. But the problem with X-Win32 is that it only works if you are on the USC networks (due to licensing). If your wireless connection is unstable, we are back to our original problem. So, our first step would be to install Cygwin. Please follow these steps to install Cygwin before proceeding.

Here are the quick and dirty steps to install Vagrant with VirtualBox:

  1. Follow these instructions to download and install VirtualBox and Vagrant. If your machine is a 64-bit machine, download and install the 64-bit version of these software.
  2. Run a Cygwin Terminal and type the following into the Cygwin Terminal (lines that start with "#" are instructions and not commands):
        mkdir ~/Vagrant
        mkdir ~/Vagrant/sitepoint
        mkdir ~/Vagrant/shared-ubuntu-vagrant
        pushd ~/Vagrant/sitepoint
        vagrant init
        rm Vagrantfile
        vagrant init ubuntu/trusty32
        nano Vagrantfile
        # nano is a text editor (you can also use "vi" if you are familiar with it), do the following in nano:
        # Uncomment and change:
        #     config.vm.synced_folder "../data", "/vagrant_data"
        # to:
        #     config.vm.synced_folder "../shared-ubuntu-vagrant", "/outside"
        vagrant up
        popd
  3. Now you have a barebone Ubuntu 16.04 running inside VirtualBox. We will refer to this Ubuntu 16.04 running inside VirtualBox as "VagrantBox". To further setup your VagrantBox, you need to ssh into it by typing the following into the Cygwin Terminal:
        ssh -X -Y vagrant@127.0.0.1 -p2222
    Use "vagrant" as your user name and "vagrant" as your password whenever you are prompted for a password when are you dealing with the VagrantBox. The above command is the command you must use to ssh into your VagrantBox (from a Cygwin Terminal).

    When you are inside your VagrantBox, if you want to use tcsh instead of bash, you should install tcsh by typing:

            sudo apt-get install -y tcsh
    To change your default login shell to tcsh, do:
            chsh
    Enter /bin/tcsh as your new shell.
  4. Run the following commands to install more software since this is a barebone system:
        sudo apt-get install -y gdb
        sudo apt-get install -y genisoimage
        sudo apt-get install -y gnome-terminal
        sudo apt-get install -y Xorg
  5. Follow the instruction to install all the necessary software to do your kernel assignments.
  6. Type "exit" to disconnect from your VagrantBox.
  7. You are all setup now! Here is the summary of 3 important commands to use your VagrantBox:
    To turn off the VagrantBox, type the following into a Cygwin Terminal:
            pushd ~/Vagrant/sitepoint; vagrant halt; popd
    The above command is the command you must use to shutdown your VagrantBox (from a Cygwin Terminal).

    To turn on your VagrantBox (from a Cygwin Terminal), do:

            pushd ~/Vagrant/sitepoint; vagrant up; popd
    To ssh to your VagrantBox (from a Cygwin Terminal), do:
            ssh -X -Y vagrant@127.0.0.1 -p2222
To exchange files between your VagrantBox and your Cygwin system, a shared folder is used. Based on the above setup, inside your VagrantBox, "/outside" is the shared folder; inside your Cygwin system, "mkdir ~/Vagrant/shared-ubuntu-vagrant" is the same shared folder. This way, if you want to backup some code you wrote for your programming assignments into your cloud drive, you can just copy your data into the VagrantBox shared folder and add the Cygwin shared folder to your favorite cloud drive.
 
Mac Os X is running Unix, but it's not running X11. Therefore, you need to first install X11. Download and install XQuartz, which includes X11 server and client software. After it's installed, run XQuartz.app from the Utilities folder in Applications. You should get a window with "xterm" in the titlebar. This is your "terminal" window running a Unix "shell".

The rest of the procedure is the same as for Windows! The only difference is that instead of using a Cygwin Terminal, you will be using a "terminal/xterm".