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

Typelibtinymaillibtinymail-camellibtinymailuilibtinymailui-gtk
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped118K255K29K227K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped32K62K6.4K49K

Additional (optional) libraries

Typelibtinymailui-mozembedlibtinymail-gnomevfs
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped77K22K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped19K6.3K

Platform specific libraries

Typelibtinymail-gnome-desktoplibtinymail-gpelibtinymail-maemolibtinymail-olpc
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped89Kxx Kbxx Kb xx Kb
ELF 32-bit LSB so, 386, v1 (SYSV), stripped21Kxx Kbxx Kb xx Kb

Language bindings

Python

Typetinymail module size
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped201K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped80.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).

Typelibcamellibcamel-provider
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped1004K1100K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped314K338K

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.

Typelibcamelimap4libcamelimaplibcamellocallibcamelnntplibcamelpop3libcamelsendmaillibcamelsmtp
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped326K346K364K158K97K30K61K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped105K121K97K48K33K8.4K27K

Irrelevant (for size measurements) libraries

Typelibtinymail-test
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped95K
ELF 32-bit LSB so, 386, v1 (SYSV), stripped28K

Totals

TypeTypical desktop tinymail with camel-lite mozembed and gnomevfs support using only IMAP
ELF 32-bit LSB so, 386, v1 (SYSV), not stripped2.2M
ELF 32-bit LSB so, 386, v1 (SYSV), stripped1.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

Typeglib itselfgobject
ELF 32-bit LSB so, 386, v1 (SYSV), stripped523K224K

OpenSSL

Typecryptossl
ELF 32-bit LSB so, 386, v1 (SYSV), stripped1.3M242K

Mozilla's NSPR & NSS

Typenss3ssl3smime3softokn3nspr
ELF 32-bit LSB so, 386, v1 (SYSV), stripped425K128K138K450K186K

gtk+-2.0

Typegtk+
ELF 32-bit LSB so, 386, v1 (SYSV), stripped2.9M

GtkHTML 2.0

Typegtkhtml
ELF 32-bit LSB so, 386, v1 (SYSV), stripped370K