Self-Contained CLI Assemblies Dipl.-Inf. Bernhard Rabe Operating Systems & Middleware Group Hasso-Plattner-Institute University of Potsdam
May 29 - June 1, 2006.NET Technologies'2006, Plzeň2 Outline Motivation Self-contained Assemblies Micro.NET Adaptive Linking Conclusions
May 29 - June 1, 2006.NET Technologies'2006, Plzeň3 Motivation Common Language Infrastructure (CLI) features: Loose coupling Dynamic linking is required at load time fusion engine (.dll vs..exe) Byte code consistency is verifiable Execution behavior depends on Base Class Library (BCL) implementation (.NET, Rotor, Mono, …) Comprehensive class library High memory requirements of runtime environment
May 29 - June 1, 2006.NET Technologies'2006, Plzeň4 C# Example public static int Main(string[] args) { Object obj=new Object(); return 1; }
May 29 - June 1, 2006.NET Technologies'2006, Plzeň5 AssemblyRef mscorlib B7 7A 5C E0 89 TypeRef System.Object MemberRef.ctor Dynamic Linking newobj 0x0a pop ldc.i4.1 ret mscorlib Assembly TypeDef System.Array System.Object MethodDef Equals.ctor ret usercode.exemscorlib.dll Main.ctor
May 29 - June 1, 2006.NET Technologies'2006, Plzeň6 Micro.NET CLR library independent deployment format Self-contained assemblies IL interpreter for small embedded devices (Lego Mindstorm) Micro.NET deals with.NET for resource limited systems memory processing power …
May 29 - June 1, 2006.NET Technologies'2006, Plzeň7 Runtime Memory Footprint Assembly Custom Library assemblies Base Class Library CLR Self-contained Assembly
May 29 - June 1, 2006.NET Technologies'2006, Plzeň8 Self-contained Assemblies No external references BCL independent Fewer memory consumption Metadata of assemblies Reduced startup delay type resolving Optimizations under investigation Whole program analysis Metadata Optimizations without Common Language Runtime (CLR) modifications
May 29 - June 1, 2006.NET Technologies'2006, Plzeň9 Avoiding Dynamic Linking Compile to native code e.g. CIL front-end no VM features: gc, sandbox code verification is challenging platform dependent Reduce the number of assemblies/references combine assemblies Streamlining dynamic linking
May 29 - June 1, 2006.NET Technologies'2006, Plzeň10 Configuration Linker tool library Adaptive Linking usercode.exe library Base Class Library self-contained assembly
May 29 - June 1, 2006.NET Technologies'2006, Plzeň11 Adaptive Linking PERWAPI library* based linker tool Combine referenced types into a self-contained assembly Types are processed recursively Fine granular linking (type level) * Queensland University of Technology (QUT), Australia
May 29 - June 1, 2006.NET Technologies'2006, Plzeň12 CIL of C# example (excerpt).class a{.method public hidebysig specialname rtspecialname instance void.ctor() cil managed {…}.method public hidebysig static void Main(string[] args) cil managed{.entrypoint.maxstack 1 newobj instance void [mscorlib]System.Object::.ctor() pop ldc.i4.1 ret }
May 29 - June 1, 2006.NET Technologies'2006, Plzeň13 Self-contained (excerpt).class Hello {.method public hidebysig specialname rtspecialname instance void.ctor() cil managed {…}.method public hidebysig static void Main(string[] args) cil managed{ … newobj instance void System.Object::.ctor() … }.class System.Object{.method public hidebysig specialname rtspecialname instance void.ctor() cil managed {…}.method family hidebysig virtual instance void Finalize() cil managed{…} }
May 29 - June 1, 2006.NET Technologies'2006, Plzeň14 Results PoCs run on Rotor, Mono, and Portable.NET without CLR modfications None CLR portable features internalcall System.Object::Equals(object obj).NET vs. Mono runtime pinvokeimpl Necessity for an highly portable BCL Source for Self-contained Assemblies
May 29 - June 1, 2006.NET Technologies'2006, Plzeň15 Conclusion Self-contained assemblies.NET on resource constrained systems reduced resource consumption Optimized deployment format for resource limited systems No CLR modifications required
May 29 - June 1, 2006.NET Technologies'2006, Plzeň16 CLR Memory Footprint Kernel Profile is smallest CLI conforming CLR Base Class Library (BCL) 145 types (ECMA 335 2nd) Runtime library 42 types (ECMA 335 2nd) BCL is embedded in mscorlib.dll mscorlib.dll ( 400Kb Compact Framework 1.0) mscorlib.dll ( 1.6Mb SSCLI 1.0)