A note of problems and solutions to compilation of an old version of caffe to verify 3Dpose_ssl project.
The Portable Personal Working Environment
For times there is some commercial USB sticks that can boot any computer into its built-in operating systems, which are mainly customized Linux and some Windows. They claim to help you turn any computer into your own working environment. Time passes and notebook computers are getting smaller, lighter and slimmer. People are taking them everywhere without considering it as a heavy and annoying tool, and those USB sticks have evolved into products like Intel Compute Stick. The new sticks are actually a micro computer that equipped with limited but complete and useful hardware and interfaces. They usually use 5V power from standard USB as power supply, and offer HDMI output. You take them as taking your laptops, and all you need to set up your personal environment is a monitor and a set of keyboard and mouse.
But back to that time, computers can't run on our fingers at a relatively low cost. USB sticks, and even portable hard drives are still expensive, and I don't own a laptop nor even a desktop computer of my own. I would like to have my portable working environment, so I've tried several solutions including PortableApps.org, MojoPac, Ceedo and U3.
Solutions and Experiences
PortableApps.org is a platform to run and manage a set of portable software. Most softwares provided by official website is open-source or at least freeware, packed in
.paf.exe format which is actually a executable installer. Those portable software require modification to software, and you cannot install your own favorite ones if they are not provided. It is, however, sometimes handy, and I keep some open-source tools on one of my flash drives.
MojoPac and Ceedo
Yes, they are two different products from different companies, but I would still like to put them together. They have several points in common. Firstly, they allow you to install (nearly) everything as you like. Secondly, they isolate your working environment from host environment. These two features make them more like a container. Think of how LXC, jails and docker works like, and you'll have a basic feeling about how MojoPac and Ceedo work like. The chief difference between them is MojoPac will bring you into another desktop after starting up, while Ceedo will only present you a "Start Menu".
I was interested in U3 but I haven't got and even not tried one up to now. In my opinion, U3 is somehow like PortableApps.org and in any way it could support specified, modified applications only.
Booting from USB
The simplest way is - just like those out-of-date products - to boot from USB drives. Windows and many Linux distribution can do the job.
For Linux, most modern Linux distributions comes with a Live CD mode, usually labelled as "Try without Installing". These Live CD can boot you into a basic system (with GUI and some other pre-loaded applications), but usually can't save your data after rebooting, nor can they provide your favorite software with customized profile. Live session with persistence would be a solution, and you can find guides to enable it on distribution wikis, for example, Ubuntu Wiki:LiveUsbPendrivePersistent. Some distributions, like Puppy Linux, Slax and Porteus have built-in persistence feature and are designed to work out-of-box. Another way is to install the complete Linux on USB sticks, but remember not to install propriety drivers as they're always trouble-makers.
For Windows, Windows PE (though it might be illegal usage) is alike Linux Live session. But the officially recommended solution is Windows To Go, which is a built-in feature introduces since Windows 8 Enterprise.
Booting from USB offers an complete customized operating system along with installed software. But the performance relies heavily on the device, and it will be embarrassing when you don't have permission to reboot or change the booting device. Besides, the system will usually consume a lot of space and that doesn't count the install applications in.
Virtualization on Flash Drives
I remember that around the year 2008, I found a project that delivers a Linux along with QEMU executable and startup scripts. When scripts are run, QEMU will boot into a Linux that is pre-configured and you could later install whatever you need in it. Forgive for I can't remember its name but it's, essentially, a virtual machine stored on portable storage. Some similar projects are QEMU-Puppy and OS Launcher (formerly PortableOS). Nowadays, almost all computers support virtualization technologies and are powerful enough to host a virtual machine, so it might not be a bad way to set your portable work environment up with virtual machines.
Would Containers Work?
Jails, LXC and Docker are being increasingly popular today. They all provide lightweight virtualization and isolation between host and containers. This allows the same software, even not designed to run both instance at the same time, to run simultaneously without knowing other instances. Technically, containers are delivered with a complete environment, and data in them could be persisted. These features make containers suitable for building portable working environments.
There (as far as I know) haven't any solutions utilize containers to allow users to make their working environment portable. MojoPac and Ceedo, as discussed above, are alike containers. Bitnami Applications is delivering software in containers, but there is still no desktop applications.
There are also problems in utilizing containers. Firstly containers can only run applications. Yes, you can find Debian, Ubuntu, Alpine or other distributions in containers, but remember these can provide you only the environment of that distribution, package manager, shells, and they are all Linux software. The core of Linux, the kernel, can't run in a container. Plus that you can't run Windows software (natively) in containers on Linux systems. With containers, only the application and data could be portable, but not the system.
For running containers on Windows and macOS, there is boot2docker. But since you've been running a virtual machine for containers, why don't you virtualize your whole working environment?
My Portable Working Environment
Laptops. Yes, laptops is still irreplaceable. Anyway it has a built-in keyboard and pointing device, and display and battery in one piece. But for convenience, I also prepare some portable software (for example, Firefox) on my flash drive. I have bootable devices but they are only used in maintenance, not for running my environment on other's computers.
Clouds and web applications are sometimes useful, too. But I don't feel like to put much of data onto public clouds so they don't work well for me.