How much disk space the tinymail framework libraries consume (on average)
About
Disk space often translates into initial memory usage of a first client that uses the tinymail framework. A shared object library will be loaded in the memory of the device, often using mmap. Subsequent clients that use the same tinymail shared object, will (in case of, for example, mmap) reuse read-only parts of the image.
Static builds
Static builds of tinymail are also possible using libtool. When you use static builds there are no more shared objects. Therefore every client that was statically linked against the tinymail framework will use the total size of the static image. Some vendors, however, prefer static compilations. The tables below give an indication of how much your binary will grow.
Like Lego
The tinymail framework is a lot like a box of Lego technics components. You can choose which components you use and whether or not you follow the construction plan when creating your piece of work.
The sizes
Note that the size of the libraries on which these depend isn't added to the amounts in these tables (unless explicitly stated). The amounts are averages and will very likely change. The idea is to update these tables each major release.
Not-stripped means that there are debugging symbols in the binary. Stripped (which is the most typical type for mobile devices) means that there are no debugging symbols in the binary.
The core abstraction libraries and their default implementation libraries
| Type | libtinymail | libtinymail-camel | libtinymailui | libtinymailui-gtk
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 118K | 255K | 29K | 227K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 32K | 62K | 6.4K | 49K
|
Additional (optional) libraries
| Type | libtinymailui-mozembed | libtinymail-gnomevfs
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 77K | 22K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 19K | 6.3K
|
| Type | libtinymail-gnome-desktop | libtinymail-gpe | libtinymail-maemo | libtinymail-olpc
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 89K | xx Kb | xx Kb | xx Kb
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 21K | xx Kb | xx Kb | xx Kb
|
Language bindings
Python
| Type | tinymail module size
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 201K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 80.3K
|
libtinymail-camel's camel-lite
Camel-lite is used by the default tinymail service-layer implementation. Therefore parts of it will be loaded (by an E-mail client that has been developed on top of a default tinymail framework). In case you are not satisfied with the default Camel-lite implementation, it's perfectly possible to reimplement Tinymail's service layer. For example using libspruce or libetpan (or .. like reimplementing everything yourself).
When using shared objects (non-static building), the libcamel and libcamel-provider libraries are always loaded. The others are loaded on-demand (using dlopen or alikes). Camel-lite is a size-reduced Camel implementation. It has, for example the mmap patches applied. Camel lite consumes less disk-space, uses significantly less memory during operation and for some providers (like the IMAP one) communicates significantly less bytes with the service to get the job done.
Evolution developers: libcamel has a static and extremely reduced version of libedataserver linked in. This is indeed the total size of the library (it no longer depends on the bigger libedataserver).
| Type | libcamel | libcamel-provider
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 1004K | 1100K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 314K | 338K
|
These are loaded on demand. This means that unless you are using the provider, it won't be loaded in memory by camel-lite. Most people only use libcamelimap and libcamelsmtp. The library libcamellocal is used for any local provider (mbox, Maildir, mh, etc), libcamelpop3 is used for POP3, libcamelimap4 is experimental support for IMAP 4rev1 (and should not be used unless you are into experimenting), libcamelnntp is used for NNTP (News groups) and libcamelsendmail is used for sending E-mails using sendmail rather than over SMTP.
| Type | libcamelimap4 | libcamelimap | libcamellocal | libcamelnntp | libcamelpop3 | libcamelsendmail | libcamelsmtp
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 326K | 346K | 364K | 158K | 97K | 30K | 61K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 105K | 121K | 97K | 48K | 33K | 8.4K | 27K
|
Irrelevant (for size measurements) libraries
| Type | libtinymail-test
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 95K
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 28K
|
Totals
| Type | Typical desktop tinymail with camel-lite mozembed and gnomevfs support using only IMAP
|
| ELF 32-bit LSB so, 386, v1 (SYSV), not stripped | 2.2M
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 1.3M
|
The total minimal diskspace of the tinymail framework. This means that all files have been stripped and that all not needed files are removed:
root@lort:/opt/tinymail# du -h
480K ./lib/camel-lite-1.2/camel-providers
484K ./lib/camel-lite-1.2
1.4M ./lib
28K ./bin
1.4M .
root@lort:/opt/tinymail#
Sizes of a few libraries
These are libraries that tinymail sometimes does but often doesn't depend on. Whether or not tinymail depends on them depends on your choices. On a lot platforms there are alternatives for some of these libraries. Often they are, for example, size reduced. A good example of this is gtk+ on Maemo, GPE and OLPC. What you are seeing here are the library sizes of the Ubuntu Dapper version of these writing services libraries. Note that it's possible that some of their dependencies aren't mentioned (for example libc isn't mentioned for any of them).
Why?, you might wonder. To give you an overview. Nothing more.
glib
| Type | glib itself | gobject
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 523K | 224K
|
OpenSSL
| Type | crypto | ssl
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 1.3M | 242K
|
Mozilla's NSPR & NSS
| Type | nss3 | ssl3 | smime3 | softokn3 | nspr
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 425K | 128K | 138K | 450K | 186K
|
gtk+-2.0
| Type | gtk+
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 2.9M
|
GtkHTML 2.0
| Type | gtkhtml
|
| ELF 32-bit LSB so, 386, v1 (SYSV), stripped | 370K
|