\documentclass[oneside,german,12pt]{amsart}
\usepackage{pslatex}
\usepackage{charter}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel}
\usepackage{url}
\usepackage
[pdftitle={},
pdfkeywords={},
pdfauthor={Florian Cramer},
backref=true,
pagebackref=true,
hyperindex=true,
bookmarks=true,
bookmarksopen=false]
{hyperref}
\setcounter{secnumdepth}{0}
\setlength\parskip{\medskipamount}
\setlength\parindent{0pt}

%% \usepackage{xspace,colortbl}
%% \usepackage[screen,panelright,gray,paneltoc]{pdfscreen}
%% \margins{.75in}{.75in}{.75in}{.75in}
%% \screensize{6.25in}{8in}

\sloppy


\begin{document}


\title{Interface}

\author{Florian Cramer}

\date{}

\maketitle

It seems as if the term ``interface'' is borrowed from chemistry where
it means ``a surface forming a common boundary of two
bodies, spaces, phases''.\footnote{According to Webster's Ninth
Collegiate Dictionary which dates the term to 1882} In computing, 
interfaces link software and hardware in relation to each other and to
their human users. So they can be 

(a) hardware that connects users to hardware; typically input/output
devices such as keyboards, and feedback devices such as screens or
loudspeakers

(b) hardware that connects hardware to hardware; network interconnection
points and bus systems for example.

(c) software, or hardware-embedded logic, that connects hardware to
software; the instruction set of a processor, for example, or device
drivers.

(d) specifications and protocols between software and software; i.e.
``application programming interfaces'' (APIs)

(e) symbolic handles which, in conjunction with (a), makes software
accessible to users; i.e. ``user interfaces'', often mistaken in media
studies for ``interface'' as a whole. 

In a software studies context, only the three (c), (d) and (e) are of
relevance. 

Regarding (c), any piece of software is an interface to hardware.
Computer programs could be seen as tactical constraints of the total
possible uses of hardware. They constrain, for example, the combination
of a CPU, RAM, hard disk, mainboard, video card, mouse, keyboard and
screen with its abundant possible system states to the function of a
word processor, a calculator, a video editor etc.. In other words, they
interface to the universal machine by behaving as a specialized machine,
breaking the former down to a subset of itself. This operation is
linguistic because it reformulates the totality of available machine
instructions into a new control --> language. This language acts as an
``abstraction layer''. It is either a subset of the total available
instructions when it is Turing incomplete, or a redressing of them with
different symbolic handles when it is Turing complete. 

``User interface'' and ``programming interface'' have not always
differed. They used to be identical in many operating systems up to
8-bit home computers in the 1980s that booted into a BASIC programming
language prompt, or MIT's Lisp machines which had a Lips programming
environment as their user interface. Character-based shells such as the
DOS and Unix shells can be used both as programming and user interfaces.
The same as true even for graphical user interfaces when they are
scriptable. But even if they aren't, they still act, as a matter of
fact, as specialized symbolic computer control languages. The
distinction of a ``user interface'', an ``API'' and a computer control
language is purely arbitrary. It's just a nomenclature that more complex
interfaces to computer functions tend to be called ``programming
languages'' and less complex ones ``user interfaces''. Since the usage
interface to a computer program is always symbolic, and involves syntax
and symbolic representations for operations, it always boils down to
being a formal language. Everything that can be said about software
interfaces is therefore redundant vis-à-vis the entry on --> language.


\end{document}
