4 ms·
Spoon is very similar to VMware Thinapp, which I started 10+ years ago. Both have a lot of similarities to Docker, but there are important areas that cannot be
by jclarkcom 12y ago
Spoon is very similar to VMware Thinapp, which I started 10+ years ago. Both have a lot of similarities to Docker, but there are important areas that cannot be addressed without Microsoft's support (see recent announcement between Microsoft and Docker). There are also other similar solutions in the industry like Microsoft AppV and VMware recently acquired a product called "Cloud Volumes".
Similarities:
- You can package your application into a single file and then run that on a clean Windows OS without installing. Startup times will vary - mostly based on the app. Docker advertises millisecond startup times, Thinapp is probably in the 10s of milliseconds to startup - but if the app comes packaged with a lot of fonts these may need to be extracted from the package first (not a problem for server apps).
- There are command line tools you can use to build your package using something like a makefile.
- You can package runtimes and support applications into your packages (.net, SQL server, etc).
- In Thinapp & others most filesystem and registry writes by the application are redirect to a sandboxed location. The sandbox directory can be located on another storage mechanism, so the VM can be treated as stateless.
Differences:
- Docker provides full namespace isolation between apps, another app on the same system won't affect your app. In Thinapp and others, this isn't 100% the case - for example names of shared memory objects, window titles, and most of the filesystem/registry will share a namespace with other processes. Thinapp has the ability to apply namespace isolation in specific cases, but doesn't do it by default because this can cause comparability issues.
- Docker provides network isolation. Each app gets it's own private network stack this eliminates port collisions, etc. This is not the case for Thinapp, etc.
- OS comparability is not assured, you still need to test your app on various OS's to make sure it works compared to Docker. For example, if your app uses a new API from Windows 7 - it will not run on Windows XP. In some cases this isn't true, you can use Thinapp/spoon to package an app with some DLLs from earlier or later versions of windows so it will run on older/newer versions - but that is not the case for things that use core system DLLs like ntdll or kernel32. I'm curious how Microsoft will address this when they introduce containers.
If you are running your app inside of a clean VM on amazon, you don't care as much about isolation of namespaces, filesystem, and network - so these solutions might be viable.
Microsoft had an old research project that died that is very close to Docker: http://research.microsoft.com/pubs/141071/asplos2011-drawbridge.pdf http://research.microsoft.com/pubs/141071/asplos2011-drawbri...
Some other comments state this is the same as VMs, it's not. Application virtualization is a bit closer to Wine - it emulates parts of the Windows loader to load applications and it places hooks in all the application's API calls to access the filesystem, register, services, etc. It hooks all API calls that might need to access something from the system so those calls can be redirected to access data inside the package.
Anyway - Spoon's announcement doesn't go into any detail on what is new relating to what they are providing, it seems a bit of marketing repositioning to capture some of Docker's popularity. But - it could be a good place for them to be if/when Microsoft completes it's work on isolated containers, if they can provide a solution in that space that competes with Docker (and "free") they might find a market.
- aidanhs 12y ago> Startup times will vary - mostly based on the app. Docker advertises millisecond startup times, Thinapp is probably in the 10s of milliseconds to startup [...] The simplest test I can think of (`docker run busybox true`) takes 0.38s wall clock, pretty far out from your statement even when allowing for it stopping as well. I've not seen millisecond startup times since pre-1.0 on any of my machines (there was a post on the mailing list about the mailing list about this slowdown a while back). When/where have you seen this advertised? Edit: unless we're excluding the time for the implicit `create` from this, which doesn't seem like a very helpful metric.
- jclarkcom 12y ago> The simplest test I can think of (`docker run busybox true`) takes 0.38s wall clock, pretty far out from your statement even when allowing for it stopping as well. Good to know. The milliseconds claim is on their website, I took it for granted and never timed it. I guess they consider anything under 1 second as "milliseconds" :) But actually the stopping time could be a factor. When the process executable path is located on a networked filesystem - cached data for that file must be thrown away by the OS once the file lock is released (which happens when the process exits). So you will actually speed up subsequent launches of the process if you delay your shutdown a little bit such that the file lock is held and thus the system cache for that file is not thrown away. They probably aren't doing this though...
- jpgvm 12y agoThe misunderstanding surrounding Docker doesn't seem to be getting any better. Docker isn't actually a containerisation engine, it's simply an orchestration layer for Linux kernel components that implement the containerisation. You shouldn't be comparing something that attempts to implement containerisation itself and something that simply calls OS APIs to do said containerisation. In terms of cross version compatibility I don't think Microsoft intends to fix this. There isn't really any reason to. They could extend the SxS system to support multiple versions of core DLLs in different namespaces but I doubt that will actually happen. The reason I doubt it will happen is that the hype around containers has nothing to do with lift and shift of legacy applications, but rather what new applications and platforms are possible with more efficient isolation and portability of runtime + application. I would expect their efforts to be directed towards .NET, making it easy to package and application, the Global Assembly Cache and any native libraries it needs. Sure you could run any arbitrary application and there would but support for that but it's clear where their priorities lie. PS: It's worth mentioning that Windows already has network namepaces support. It was implemented to support the virtual network gateways for VMM's NVGRE. I think it's safe to assume they will go the Linux route and implement separate support for process, permissions and filesystem namespacing too. The real show will be wether filesystem namespacing is done at VFS layer of if they implement it directly in NTFS or ReFS.