How much disk space the tinymail framework libraries consume (on average)

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

Platform specific libraries

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