KBOX limitations and known bugs

KBOX is (always) a work in progress. There are some known bugs, which may at some point be fixed. These are tracked on the github issue tracker.

There are, however, some fundamental limitations which can probably never be fixed, because Android is what it is. I am in the process of moving the known bugs to the github repository -- please bear with me.

KBOX is a single-user system

Like Android (essentially), KBOX is a single user-system. Within the KBOX 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. Any utility that expects users to authenticate themslves will likely struggle, although the kbox-login package provides a stub implementation of /bin/login that can help in some situations.

Many utilities expect a full keyboard

For example, even the humble hexedit expects to be able to use function keys (F1, F2,...). Most Android virtual keyboards do not provide all the necessary keys, although some can be programmed to use other key combinations. Even many physical keyboards no longer provide them.

Worse, if you have to rely on a virtual, on-screen keyboard, the screen size will change whenever the keyboard pops up. Some utilities will cope with this, but many will not.

The Android C library lacks multi-byte character support

A number of applications that now support multi-byte characters have had to be built with that support disabled, because the Android C library does not provide the necessary infrastructure.

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. As a user, you will at least have to assign non-default port numbers to some utilties.

OpenSSL issues

The move from OpenSSL to BoringSSL in Android has caused a heap of problems, too numerous to list here.