Logo Computer scientist,
engineer, and educator
• Software  • The KBOX3 project

KBOX3 limitations and known bugs

KBOX3 is a work in progress. There are some known bugs, which may at some point be fixed. There are, however, some fundamental limitations which can probably never be fixed, because Android is what it is.


KBOX3 is a single-user system

Like Android (essentially), KBOX3 is a single user-system. Within the KBOX3 shell there is no concept of login or user credentials. All files are owned by the same user — the user that owns the terminal emulator. The user ID is itself aribtrary — a sequence of numbers with no particular meaning — so it is nearly always necessary to specify a user ID explicitly when using utilities that expect one.

Screen width and height will be different from a desktop system

Many Linux utilities are intended to work with a console 80 characters wide and 25 lines high. Even though the days of dumb terminals are long gone, a lot of Linux/Unix software originates from those days. It's quite difficult to get a display 80 columns wide on a small-screen device, and still be able to read the text without a magnifying glass. Many utilties provide a way to specify the width of the console; for example, frotz takes a -w NN switch for this purpose. A few (very few) utilities can work out the console size using the ncurses library. Some utilities are hard-coded to generate 80-column output, and there's no real way to change this behaviour without modifying the code.

To make matters worse, the width and height of the console in characters will change if you change the font size used by the Android terminal emulator.

This is a general problem of running console-based software on a device that was never really intended for such a mode of operation. 10" tablets behave better in this respect than cellphones.

Android is firewalled

Android does not readily allow incoming connections, and the firewall settings cannot be changed by a non-root user. So, although KBOX provides SSH and rsync servers, you might not be able to connect to these services from outside the device. This behaviour varies from vendor to vendor. In some cases, a workaround is to make a connection from the Android device to the host that will be initiating the network connection to the device. This may have the effect of relaxing the firewall for that particular client/server combination. However, this is fundamentally a restriction of Android, and not one that is easy to work around.

Many networking utilities default to using port numbers in the 1-1024 range

These ports are not available to unprivileged users. This means that even if you can run an ssh server without being blocked by the firewall (see above), you'll need to tell both the client and the server to use a port other than the default of 22. This applies to most other network daemons also.

Known bugs

0001. "dpkg -i" sometimes fails with "can't create backup status file".
Work around by "rm -rf /var/lib/dpkg/status.udeb.bak". Cause currently unclear.

0002. "rm" sometimes fails with absolute paths. This seems to be a problem with the rm implementation in the coreutils package, not in Busybox. Cause unclear. The only solution, coreutils is installed, is to remove /bin/rm and relink it to /bin/busybox.

0003. "scp" complains about missing "/usr/bin/ssh".
The rest of the Dropbear binaries install in /bin. Fixed by modifying scp to look in /bin.

0004. Missing symbols in libssl.so.
OpenSSL package was more recent than the Android version, leading to clashes. Fixed by removing all dependencies on OpenSSL, so the Android version is used instead. Added a warning to the download page. Ideally, it would have been better to use the later version, but the Android installation cannot be changed without root permissions.

0006. Perl: dlopen failed: cannot locate symbol "ctermid" referenced by "POSIX.so"
This problem arises because some versions of Android Bionic do not provide any implementation of the ctermid() function, but the Google NDK cross-compiler does not know that. In some cases the problem may be ameliorated by downloading this modified version of POSIX.so and copying it over te top of the original usr/lib/perl5/5.20.2/arm-androideabi/auto/POSIX/POSIX.so. I should point out however that ctermid(), in common with many console-related functions, will not do anything useful in Android, and any application that expects it to work in a particular way will likely be disappointed.

Copyright © 1994-2015 Kevin Boone. Updated Sep 16 2015