User Tools

Site Tools


Android is an operating system created by Google. It is used on many mobile devices - mostly mobile phones, but also tablet computers. Android is not to be confused with Chrome OS, another operating system created by Google.

Android runs on top of Linux, an open source variant of the Unix operating system.

Android applications are written in the Java programming language, and each running Android application runs inside a separate Java Virtual Machine.

Android-based devices can be tinkered with on two levels: you can create Android application code, or you can re-configure or make changes to the underlying Linux system.

Android application code, being Java-based, can be used on all kinds of Android devices, independent of the hardware used.

On the other hand, when tinkering with C or C++ code in Linux, you might need to re-compile your source code using a compiler or a cross-compiler, because compiled C or C++ code only runs on one particular type of processor.

Android SDK

The Android SDK is a collection of programs and source code which allows a software developer to create Android applications. It is often used together with the Eclipse IDE.

Eclipse with the Android SDK installed allows a developer to create, test, and debug Android applications, either on an Android emulator or on a physical Android device.


.apk is a file name extension used for files that contain Android applications.

APK = Android PacKage.

.apk files are internally very similar to .jar files, which themselves are based on the .zip compressed file format.

You can make a quick inspection of an .apk file on a Windows or Macintosh computer by manually changing the file name extension from .apk to .zip. The computer will then treat the file as any other .zip, and allow you to decompress the archive into a folder with contents.

An .apk is a .zip in disguise, but the reverse is not true: a .zip is not an .apk

You cannot modify the contents of the decompressed .zip, then re-zip it, then rename it to .apk - the resulting file will not work when you try to install it.

Instead, you need to use a special tool to build the .apk file; this functionality is part of the Android SDK.


In computer terms, an application is a collection of one or more computer programs that can be used by the user of the computer to perform certain set of related tasks.

Examples of applications are: a word-processor, a spreadsheet, an e-mail program, a chat program, a web browser…

There are no hard and fast boundaries to what constitutes a single application.

Sometimes you will find a set of related tasks in a single, more extensive applications. Sometimes, you will need to use two separate applications to achieve the same result. For example, some applications combine both word-processor and spreadsheet functions in a single application.

A whole group of related applications is sometimes grouped into a suite or application suite.

Applications need to be installed on a device before they become available (unless they have been pre-installed by the manufacturer of the device or operating system).

This installation process can be very easy or very complex - it all depends on the size and scope of the application, and how much work and thought has been given to the installation process.

In some cases, installation is a manual process that involves manually copying files, moving files, and editing configuration files. In other cases, installation can be as simple as clicking an installer icon.

Often, applications come 'paired' with a secondary application often referred to as 'the installer/uninstaller'. The main function of this second application is to install the primary application onto a device. The installer can often also uninstall (remove) an application when it is not needed any more.

Installing an application, whether it is done manually or with an installer will involve copying one or more files onto the device.

In many cases, there are also adjustments to be made to existing files on the device, so the device can be made aware of the new application.

Installing an Android application on an Android device involves copying a special installer file with an .apk file name extension to the device, and then running this .apk file.

An .apk file is an archive - the actual application consists of many files, but through some clever software, all these separate files have been packaged into a single .apk file.

Running the .apk file on the Android device will automatically 'unpack' the archive, and stash the various component files in the correct locations on the device.

In case of Android devices, the installer/uninstaller functionality is part of the Android operating system - software developers do not need to write their own installers.

In the case of the Batphone, installation is not a simple point-and-click operation - part of the software is run by the underlying Linux operating system. Installing Linux software on an Android device is not normally supported by the standard Android installer functionality.


An archive is a generic term used to refer to a single file that 'contains' a set of other files inside.

Using one or another archiving program, you can select one or more files, and create a single archive file which contains all of these files.

This makes it easier to transmit a set of related files - instead of having to transmit file after file, you create an archive, and then send the archive. At the other end, the receiver de-archives the archive, which re-constitutes all the files.

There are may ways to archive files - popular archive formats are .zip, .tar, .tgz, .tb2 - all of these have their own archiver/dearchiver program or programs.


ARM is a family of microprocessors with a RISC instruction set. In the early days of personal computing, the ARM CPU was designed to be the heart of the Acorn Archimedes. Since then it's gone through a long evolution, and there is now a whole family of related, but similar CPUs on the market, used in all kinds of devices.

There is a variant of Linux that can run on ARM processors.

Many Android-based tablet computers use a CPU from the ARM family. However, as Android is based on the use of a Java Virtual Machine, it is independent of the hardware used to run the encompassing Linux - so pure Android applications should run on most Android platforms (barring Android version issues, or hardware limitations - e.g. a GPS-based app won't do much on a device that does not have GPS hardware built in).


Software PBX software that runs on top of Linux. Found all over the eco-system: on computers, on Wifi routers (reprogrammed to use the OpenWRT Linux variant), on Android phones.

Supports the SIP protocol.


Better Approach To Mobile Ad-hoc Networking


Batphones are elements of the Serval project.

A Batphone is a regular Android-based phone with additional software loaded onto it. This software essentially allows cell-phone communications over Wifi without need for cell towers.

Batphones can communicate directly from phone to phone without the need for an intermediary cellphone tower.

When multiple Batphones are sufficiently near each other, they automatically form a mesh network, and extend the range of each individual phone by allowing communications to 'hop' from phone to phone.


Bricking your Android device is a term to describe what happens when your device ends up in a catatonic state: you cannot start it, it does not listen to keystrokes, it becomes unresponsive…

Typically, bricking happens while you're trying to root your device: an incorrect manipulation, or a 'trap' set by the manufacturer to discourage rooting sends the device into a coma.

Recovering from a bricked device can be hard - sometimes soldering and hardware tinkering becomes necessary to make the device come back from the near-dead.

Chrome OS

Complex Instruction Set Computing

command line

Central Processing Unit


Distributed Numbering Architecture - A part of the Serval system for mesh connected telephony.


Open Source Integrated Development Environment for a number of development languages and platforms.


Early Windows File System, 16bit File Allocation Table. Has a limit of 2GBytes, still used on smaller memory disk devices. Also see File System and


A Windows File System, 32bit File Allocation Table. Has a limit of 2TBytes or possibly higher, used on larger memory disk devices. Also see File System and


A contiguous string of bytes is often referred to as a file. Most files have a name (but some operating systems allow for nameless files in some form or shape).

In addition to the name, files can have many additional attributes: last modified time and date, an icon, a file name extension, permissions,… Some of these attributes are easily visible to the end-user (e.g. the icon or the file name extension), some are not immediately visible.

Files can be organized in some way - most of the time, they're arranged in a folder (also known as directory) hierarchy.

File names are often limited in some way - there might be certain characters that are forbidden, their length might be limited. What the limitations are depends a great deal on the underlying operating system and/or file system used.

Some file systems have case-sensitive filenames, others are case-insensitive.

File Name Extension
File System

A way to organize and manage a memory device (hard disk, flash memory device,…). There are many file systems, and they tend to be loosely tied to some operating system.

Linux/Unix: ext2, ext3, zfs… (there's a lot of file systems commonly used with Linux).

Mac: HFS, HFS+.

Windows: FAT-16, FAT-32, NTFS.

Some operating systems (e.g. Linux and Mac OS X) can easily work with pretty much any file system under the sun - so Linux and Mac support, say, FAT-32.

Other operating systems are more limited - e.g. it is harder to use Windows with a file system that is not FAT-16, FAT-32 or NTFS.

The FAT-xx file systems are very commonly used with Flash memory - because nearly all operating systems support FAT, it's a bit of a lowest common denominator.


Global Positioning System. Satellite based system to determine position using a GPS receiver.


High Tech Computer Corporation: Manufacturer of a range of cell phones, in particular Smartphones.


Integrated Development Environment

Java Virtual Machine

Java Development Kit

Mesh Potato

NT File System: Windows file system in use since Windows NT, various versions have been used with versions of Windows since Windows NT, and was a replacement for FAT file systems. Also see File System

Operating System


Programming Language

Random Access Memory


Reduced Instruction Set Computing


Read Only Memory


The Linux and Unix operating systems normally have a special user account called 'root'. Other operating systems like Windows have a similar concept - 'administrator', 'administrative account'… are other terms to describe it.

The superuser or root user is a special Linux user account which has unrestricted access to all areas of the system.

To get full control over an Android device you need to 'root' the device - which means: you need to manage to log into the embedded Linux with superuser credentials.

Most Android devices are purposely 'locked out' of super user access.

For example, an Android-based phone could be locked in to a certain mobile network operator, and the network operator will want to make sure you cannot buy a subsidized phone for little money and then go and use it on a competitors' network. So the mobile network operator will try to make it very hard to root your phone.

You might need to rely on knowledge gained by the hacker-community in order to gain root access to your device.

There are a number of ways you can gain root access to a device: - The device might be a special developer phone from Google - The device might have a flashable ROM, to allow upgrading the embedded Linux/Android operating system. The trick is then to modify the contents of the ROM before flashing it - i.e. get a file with a copy of the ROM from the manufacturer of the device, unpack the contents of this file, tinker with it, repack it, and then flash the device with it. - There might be an exploitable bug in the Linux/Android operating system which allows one to gain root access.


Software Development Kit


Session Initiation Protocol. A Protocol used to set up VoIP calls. Can be used device-to-device or device-to-intermediary-to-device. Intermediary is often Asterisk, running on some device (computer, Wifi router, Mesh potato, Android phone).


Popular VoIP solution. Does not support SIP - a gateway is needed to tie Skype into a SIP-based setup.

Source code

Nowadays, software is rarely developed using assembly language, the language that is native to the CPU driving the device. Assembly language is CPU-family-specific: ARM assembly language is different from x86 assembly language (Intel/AMD) is different from PPC assembly language (IBM/Motorola), and so on.

Assembly language is only one step up from machine code - machine code being the pure 0/1 bits that the CPU can interpret as instructions; typically one assembly language statement will represent one machine code instruction.

Most software is written by developers in a somewhat English-like gobbledygook called 'a programming language', which is then converted to machine code one way or another. Popular programming languages are C, C++, Java, Python, PHP, BASIC, C#, VBS, JavaScript… there are many 1000s of programming languages.

What makes a developer choose a particular programming language is not clear-cut: it depends on what languages are practically available in the targeted environment, what kind of application the programming language was designed for, what the specifications of the project are, what they are familiar with…

Sometimes, the conversion to machine code is done early on, by the developer, before distributing his program. The developer then uses a special program called 'a compiler' to convert the program he wrote into machine code.

Sometimes, the conversion is done late, by the computer when the program is executed: the executing computer uses a special program often called 'an interpreter' to perform the high-level directions in the program (eventually executing a massive amount of machine code instructions to do as the program tells it to).

Sometimes, the conversion is done both early and late: the developer uses a compiler to convert the program he wrote into some intermediate, more primitive form (often that's a form called 'byte code'), and then when the program is executed, the executing computer further translates or interprets the byte code down to machine code. Java programs are often using this approach: the Java program is converted to byte code by the developer before distribution. Then the byte code is converted down to machine code on the executing computer by a Just-In-Time compiler, or interpreted by a Java interpreter (often called a Java Virtual Machine or JVM).

To make a long story short: for nearly every program that you can execute on a computer, there is some source code somewhere. Having access to that source code opens up the possibility to enhance the program or correct mistakes in it - that is a great advantage of open source.


.tar is a file name extension used to 'mark' files that are an archive file format originating in the Unix world - it was originally designed for tape archival of files (hence tar - Tape ARchive).

.tar files and compressed .tar files are commonly referred to as tarballs.

.tar files are not compressed - they are essentially a simple concatenation of individual files, intermingled with extra info, like the file name and the file length of the file that follows.

Because files with a .tar file name extension are not compressed, you can often still extract valid info from a .tar file even if it has been corrupted - it's a matter of 'cutting out' the file you need and ignoring the rest of the .tar file.

.tar files are often compressed after they've been created - see tbz, tb2, tgz.


See tar, tbz, tb2, tgz


.tgz is often used as the file name extension for files that were first created by the tar program, and then compressed by the gzip program.

Older versions of Linux/Unix use two programs - first tar and then gzip to create the .tgz file.

More modern versions and clones of the tar program often contain the functionality of gzip and can create a .tgz file in a single operation.

.tgz files also sometimes carry the extension .tar.gz - these can be used interchangeably.


.tb2 or .tbz is often used as the file name extension for files that were first created by the tar program, and then compressed by the bzip2 program.

Older versions of Linux/Unix use two programs - first tar and then bzip2 to create the .tb2 file.

More modern versions and clones of the tar program often contain the functionality of bzip2 and can create a .tb2 file in a single operation.

.tb2 files also sometimes carry the extension .tar.bz2 or .tbz - these can be used interchangeably.


See tb2


Software evolves. As it evolves, the developer(s) will assign it a version number - higher version numbers mean more recent software.

Version numbers occur on many levels - e.g. a suite of programs might carry a version number as a whole, and then the individual programs inside that suite can have their own version numbers, and then the individual subroutine libraries used by those programs can have version numbers…

You can think of software as being arranged in a version 'tree' - the topmost level of some software has a version, that software is composed of smaller components each carrying their own version numbers, which themselves are composed of even smaller components.

With Android, the main version numbers seen in the wild are 1.5, 1.6, 2.0, 2.1, 2.2.

For Linux, the version numbers tend to start with 2.6.somethingorother

In order to get a working system (whether it is a computer system, telecoms setup…) all the versions of all the components need to be mutually compatible and dependable - it is not always safe to assume that by grabbing the latest versions of everything it will work.

Newer versions of some component might introduce problems in other components.

Version management is hard - even with a cursory look at an Android device you immediately notice there's two main versions involved: the version of the Android software, and the version of the Linux software underneath.

In the Linux world, there is a system of 'distributions'. Popular distributions as Ubuntu, Debian, Slackware, OpenWRT…

Essentially, what a distribution does for an end-user is to find out which versions of which components to use together, and then push these out to the world.

So, something called 'Ubuntu 9.4' represents a massive tree of components with mutually compatible (hopefully!) versions.

Village Telco

A small and cheap do it yourself style telephone system based on WiFi, standards based componentry, much of it FOSS.

Virtual Machine

Trademark name for devices used for Wireless Local Area Networks (WLAN)


Popular Wifi router, made by Cisco. Some (but not all) versions of this device can be re-flashed with OpenWRT, a Linux variant. Once running OpenWRT, one can install software like Asterisk.

The different variants of the WRT54G vary in memory size, whether they can or cannot be reflashed with OpenWRT… so you should never blindly grab any old WRT54G and expect to use it. It has to be the right type and subtype. Whether it can be used sometimes it even comes down to the subversion of the firmware it uses.

A popular variant is the WRT54GL (versions 1.0 - 1.2). This version is specifically made so it can be reflashed with Linux (OperWRT) - hence the 'L' in the type name.


Compressed archive format - you can take a number of files and folders, and convert them into a single .zip file. Makes transmission of whole file trees easier.

.zip files are limited in size - there are .zip enhancements that support files > 4GB but not all .zip programs can handle these.

There are other programs and compressed formats with 'zip' in the name - e.g. gzip. However, gzip is not zip; it's a different animal all together.

alphabetsoup.txt · Last modified: 2010/08/28 23:44 by steve