Systems software versus applications software definitions

M

Matt

How do we define systems programs? when we say systems programming,
does it necessary mean that the programs we write need to interact
with hardware directly? For example, OS, compiler, kernel, drivers,
network protocols, etc...? Couple years ago, yes, I understand this is
definitely true. However, as the software applications become more and
more complicated, some people try to argue that. Some people argue the
definition of systems programs depend on the level of abstractions. I
heard people saying that web server is a systems software, which I
feel confused. I think web server is an application software. Yes,
other applications run on top of web server.

Please advise and discuss. thanks!!
 
G

Gordon Burditt

How do we define systems programs?

comp.lang.c does not.
when we say systems programming,
does it necessary mean that the programs we write need to interact
with hardware directly?

That term does not have a precise definition and there is not
a sharp line between systems and applications programming.
The line gets particularly fuzzy when you are talking about
computers embedded into other devices, like cell phones.

No, I'd consider a lot of the low-level network stuff like the
TCP stack to be systems programming, even if it's not specific
to a particular type of network hardware (and there may not BE
any specific network hardware beyond a serial port. There are
also "tunnel drivers" which have a network stack but don't
actually use any hardware at all).
For example, OS, compiler, kernel, drivers,
network protocols, etc...? Couple years ago, yes, I understand this is
definitely true. However, as the software applications become more and
more complicated, some people try to argue that.
Some people argue the
definition of systems programs depend on the level of abstractions. I
heard people saying that web server is a systems software, which I
feel confused.

The video driver in Microsoft Windows probably calls Internet
Explorer to actually access the hardware :-( In any case, Microsoft
claims IE is so tightly bound into the OS you can't remove it.
I think they said that under oath in court, too.
I think web server is an application software. Yes,
other applications run on top of web server.

I consider the web server in my VOIP terminal adapter to be systems
programming, in large part because it is burned into flash and is
used to configure the adapter. The same thing applies to the Web
Management Card (which runs a web server, SNMP server, and a few
other things) that plugs into my APC UPS, for much the same reason.

On the other hand, Apache running on my PC I consider to be an
application (which, as you said, has other applications running
under it, like PHP and under that various web pages which do various
things, like present an index of my CD collection.)

Gordon L. Burditt
 
M

Matej Barac

How do we define systems programs? when we say systems programming,
does it necessary mean that the programs we write need to interact
with hardware directly? For example, OS, compiler, kernel, drivers,
network protocols, etc...? Couple years ago, yes, I understand this is
definitely true. However, as the software applications become more and
more complicated, some people try to argue that. Some people argue the
definition of systems programs depend on the level of abstractions. I
heard people saying that web server is a systems software, which I
feel confused. I think web server is an application software. Yes,
other applications run on top of web server.

Please advise and discuss. thanks!!

I personally would say programming an application is getting easier with
time (C#, Java, VB,...). Hardly anyone still bothers with Assembly...

On the topic, for me a system program is the one that either a) interact
with the hardware directly (and are written on a very low level) or b)
interacts with the OS on a low level (PartitonMagic for example).
 
M

Matej Barac

The video driver in Microsoft Windows probably calls Internet
Explorer to actually access the hardware :-( In any case, Microsoft
claims IE is so tightly bound into the OS you can't remove it.
I think they said that under oath in court, too.

Kind of off topic, but... IE can be "safely" removed from the OS.
 
D

dandelion

Matej Barac said:
On 24 Nov 2004 16:00:55 -0800, Matt wrote:

I personally would say programming an application is getting easier with
time (C#, Java, VB,...). Hardly anyone still bothers with Assembly...

Unless, of course you are into embedded software, where it's (on a regular
basis) neccesary in order to implement ISR's (for one instance). Also
implementing support for many CPU/HW features can hardly do without.

<snip>
 
M

Maxim S. Shatskih

The video driver in Microsoft Windows probably calls Internet
Explorer to actually access the hardware :-( In any case, Microsoft
claims IE is so tightly bound into the OS you can't remove it.
I think they said that under oath in court, too.

Correct. The Windows shell (the code which manages the taskbar, start menu,
file folder windows and things like My Computer window) is hardly linked to
MSHTML and is dependent on it.

As about "system" vs. "app" level development - I would jugde from the
practical standpoint of a) tools used b) stability requirements. From such
point of view, all embedded code is system one :)
 
M

Maxim S. Shatskih

Kind of off topic, but... IE can be "safely" removed from the OS.

No.

You can install another browser and use it as a default handler for URLs.
Nothing more. Help files, shell folders and lots of new-fashion XP's UI are
still shown by MSHTML.
 
C

CTips

Matt said:
How do we define systems programs? when we say systems programming,
does it necessary mean that the programs we write need to interact
with hardware directly? For example, OS, compiler, kernel, drivers,
network protocols, etc...? Couple years ago, yes, I understand this is
definitely true. However, as the software applications become more and
more complicated, some people try to argue that. Some people argue the
definition of systems programs depend on the level of abstractions. I
heard people saying that web server is a systems software, which I
feel confused. I think web server is an application software. Yes,
other applications run on top of web server.

Please advise and discuss. thanks!!

I'd say that system software generally shares the following characteristics:
- its performance sensitive
- it has some dependence on hardware
Now, kernel + compiler definitely satisfy both these two requirements,
network protocol stacks mostly the first, drivers mostly the second.
 
?

=?ISO-8859-1?Q?Jan_Vorbr=FCggen?=

I'd say that system software generally shares the following
characteristics:
- its performance sensitive
- it has some dependence on hardware

I would disagree. For me system software is more or less equivalent to
being part of the trusted computing base, with the more or less implied
side effect that if something unexpected goes wrong with it, you need to
crash the system. Handling hardware is only part of that, and there are
scenarios where you can have software driving hardware directly without
being part of the TCB - rare, but it has happened. Performance - sure,
you would want that, but correctness is top priority. As a counterpoint,
how many OSs have you seen that have been compiled with optimization for
the particular processor model they will run on?

Jan
 
M

Matt

Hi Matt, I'm Matt too,

Great question, I always wondered that too. I met an embedded programmer in
San Diego years ago. He said the more down to the hardware level he got, the
more exciting it was. Also maybe somebody could explain this, I've seen a
lot of mainframe positions advertised as "system programmer"

Matt
 
A

Anne & Lynn Wheeler

Jan Vorbrüggen said:
I would disagree. For me system software is more or less equivalent
to being part of the trusted computing base, with the more or less
implied side effect that if something unexpected goes wrong with it,
you need to crash the system. Handling hardware is only part of
that, and there are scenarios where you can have software driving
hardware directly without being part of the TCB - rare, but it has
happened. Performance - sure, you would want that, but correctness
is top priority. As a counterpoint, how many OSs have you seen that
have been compiled with optimization for the particular processor
model they will run on?

when i did the resource manager ... there was something like 2000
(automated) tests that took 3 months elapsed time to run as part of
calibrating and verifying the resource manager.
http://www.garlic.com/~lynn/subtopic.html#bench

the standard system maint. process was monthly update (patch?)
distribution called PLC (program level change). It would ship the
cumulative source updates as well as the executable binaries.

I was asked to put out monthly PLC for the resource manager on the
same schedule as the standard system PLC. I looked at the process, and
made a counter-offer of quarterly PLC for the resource manager
.... since I would have to take all the accumulated patches (for the
whole system) and rerun some significant number of the original
validation suite .... and there just weren't the resources to do that
on a monthly basis.
http://www.garlic.com/~lynn/subtopic.html#fairshare
http://www.garlic.com/~lynn/subtopic.html#wsclock

reference to the original resource manager product announcement
http://www.garlic.com/~lynn/2001e.html#45

note that much of the bits & pices that was in the resource manager
had been available in earlier kernal ... but were dropped over period
years. it was eventually decided to collect them up and package them
as a separate distribution.

this was in the period of some transition from free to charged for
software. at the time, there had been soem distinction that
application software could be charged for ... but kernel/system
software (as part of supporting the machine) was free.

the resource manager got to be the guinee pig for the first charged
for kernel software component ... with a new distinction that kernel
software that was directly related to hardware software would still be
free ... but other types of kernel software could be charged for.

a interesting paradox then showed up for the next release. the
resource manager shipped with the release prior to the release that
shipped smp support.
http://www.garlic.com/~lynn/subtopic.html#smp

however much of the SMP design and implementation was predicated on
various features that were part of the resource manager. the problem
was that SMP support was obviously directly supported hardware and
therefor was free ... but now had integral dependancies on features in
the resource managere ... which was priced.
 
J

Juhan Leemet

Hi Matt, I'm Matt too,

Great question, I always wondered that too. I met an embedded programmer in
San Diego years ago. He said the more down to the hardware level he got, the
more exciting it was. Also maybe somebody could explain this, I've seen a
lot of mainframe positions advertised as "system programmer"

I remember seeing a nice little table in Datamation many years ago:
relating the approximate difficulty of implementing software:

| single-user multi-user
----------------+----------------------------
application | 1 3
system | 3 9 <== HARDEST

[Dunno if that survived formatting?]

One may quibble with the numbers, but they are roughly representative. The
simplest thing to program is a little application, just for yourself. If
one uses that as a reference, then it is very roughly 3x harder to write
something that is multi-user (simultaneously) or system level. The most
complex is something that is both system level and multi-user (like an
operating system kernel). I had to scratch my head to think of what would
be single user system type software? I guess that could be a simple (not
multi-user) interface or driver (like a single serial or parallel port?
locked for exclusive use?) or perhaps some embedded software which does
only one thing (while dealing with the real world, interrupts, etc.). The
foreground/background control applications we used to write for DEC
PDP-11s under the RT-11 O/S (er, actually more like a program launcher
like CP/M) might be an example of that kind of thing (or CP/M "drivers"?).

The hardest thing to write (and get right) is a multi-user system level
software, like the Linux kernel, or on mainframes a transaction processing
monitor like CICS or even virtual terminal handling stuff like VTAM. Now
among the hardest of the hard, some are harder than others, so 9x
multiplier in the table is to be taken with appropriate grains of salt.

Anyway, that comparison table has helped my thinking.

As for "getting closer to the hardware"? Sounds like a control freak. I
guess anyone that likes to program (make machines do what you instruct
them to) is a control freak to some extent. Personally, I think we might
not be as extreme as some Skinnerian psychologists that I have known.


I would say a web server is typically a multi-user application. You could
write a single thread server that handles only one request (some tiny
embedded microcomputers have this), but then what is it supposed to do if
more than one request comes in? A real web server, with performance
enhancements should be designed multi-user, able to handle multiple
requests (pseudo)simultaneously. That is more complex than single-user,
maybe equivalent to simpler system level (i.e. not kernel) programming.


Starting to smell like homework?
 
N

Nick Roberts

How do we define systems programs? when we say systems programming,
does it necessary mean that the programs we write need to interact
with hardware directly? For example, OS, compiler, kernel, drivers,
network protocols, etc...? Couple years ago, yes, I understand this is
definitely true. However, as the software applications become more and
more complicated, some people try to argue that. Some people argue the
definition of systems programs depend on the level of abstractions. I
heard people saying that web server is a systems software, which I
feel confused. I think web server is an application software. Yes,
other applications run on top of web server.

Please advise and discuss. thanks!!

I would define 'application software' as the programs which actually
directly do something which is actually useful to the user. This might be
formatting and printing a document, calculating the results in a
spreadsheet, or it may be compiling a program (if the user is in fact a
programmer). But I'd say it doesn't include, for example, a program for
setting the modem transmission speed, since this isn't really doing anything
directly useful to user (normally).

The 'system software' comprises all the programs (or modules or other bits
of software) necessary to enable the applications software to work.

Of course, there will be some programs which don't obviously fit into either
category. For example, what about Windows Explorer or an equivalent program?
Is file manipulation directly useful to the user? Not really; but it is,
sort of. So I think that's the kind of program which occupies a grey area
between 'application' and 'system'.

Obviously, this is a rough definition, but I don't think a more precise
definition would be appropriate.

--
HTH
Nick Roberts

[Cross-posted: comp.software-eng, comp.lang.c, comp.programming,
alt.os.development, comp.arch]
 
A

Anne & Lynn Wheeler

Juhan Leemet said:
I remember seeing a nice little table in Datamation many years ago:
relating the approximate difficulty of implementing software:

| single-user multi-user
----------------+----------------------------
application | 1 3
system | 3 9 <== HARDEST

i've frequently claimed that to take a straight forward written
application and turn it into a "service" ... it takes 4-10 times the
code and ten times the work.

example that i frequently used was taking the straight-forward stuff
written to support server handling financial transaction and upgrading
it to business critical integrity for electronic commerce
http://www.garlic.com/~lynn/aadsm5.htm#asrn2
http://www.garlic.com/~lynn/aadsm5.htm#asrn3

where service and system are somewhat related since they frequently
tend to have similar business critical integrity requirements.

it used to be that system tended to be associated with things/services
that required elevated privileges .... and that other software
(typically applications) depended on those things. these days with
personal computing ... system could refer to everything involving the
computer,

misc. posts related to assurance:
http://www.garlic.com/~lynn/subpubkey.html#assruance

random past references to business critical integrity requirements and
frequently needing 4-10 times the amount of code:
http://www.garlic.com/~lynn/2001f.html#75 Test and Set (TS) vs Compare and Swap (CS)
http://www.garlic.com/~lynn/2001m.html#4 Smart Card vs. Magnetic Strip Market
http://www.garlic.com/~lynn/2001n.html#91 Buffer overflow
http://www.garlic.com/~lynn/2001n.html#93 Buffer overflow
http://www.garlic.com/~lynn/2002b.html#59 Computer Naming Conventions
http://www.garlic.com/~lynn/2002n.html#11 Wanted: the SOUNDS of classic computing
http://www.garlic.com/~lynn/2003g.html#62 IBM says AMD dead in 5yrs ... -- Microsoft Monopoly vs. IBM
http://www.garlic.com/~lynn/2003j.html#15 A Dark Day
http://www.garlic.com/~lynn/2003n.html#52 Call-gate-like mechanism
http://www.garlic.com/~lynn/2003p.html#37 The BASIC Variations
http://www.garlic.com/~lynn/2004b.html#8 Mars Rover Not Responding
http://www.garlic.com/~lynn/2004b.html#48 Automating secure transactions
http://www.garlic.com/~lynn/2004k.html#20 Vintage computers are better than modern crap !
http://www.garlic.com/~lynn/2004l.html#49 "Perfect" or "Provable" security both crypto and non-crypto?
 
A

Andi Kleen

Juhan Leemet said:
I remember seeing a nice little table in Datamation many years ago:
relating the approximate difficulty of implementing software:

| single-user multi-user
----------------+----------------------------
application | 1 3
system | 3 9 <== HARDEST

[Dunno if that survived formatting?]

One may quibble with the numbers, but they are roughly representative. The

I would consider a state-of-the-art optimizing compiler to be of equal or higher
complexity than a kernel. But it would be 1 in your scheme.

There are probably lots of other counter examples. How about a single-user
application that solves some incredibly complex problem?
As for "getting closer to the hardware"? Sounds like a control freak. I
guess anyone that likes to program (make machines do what you instruct
them to) is a control freak to some extent. Personally, I think we might

If that was true then libraries would be a lot less popular than they are.

-Andi
 
J

Juhan Leemet

i've frequently claimed that to take a straight forward written
application and turn it into a "service" ... it takes 4-10 times the
code and ten times the work.

Thanks, that puts some meat on the bones.
example that i frequently used was taking the straight-forward stuff
written to support server handling financial transaction and upgrading
it to business critical integrity for electronic commerce
http://www.garlic.com/~lynn/aadsm5.htm#asrn2
http://www.garlic.com/~lynn/aadsm5.htm#asrn3

Some interesting stuff there. You folks been busy!
 
J

Juhan Leemet

Juhan Leemet said:
I remember seeing a nice little table in Datamation many years ago:
relating the approximate difficulty of implementing software:

| single-user multi-user
----------------+----------------------------
application | 1 3
system | 3 9 <== HARDEST

[Dunno if that survived formatting?]

One may quibble with the numbers, but they are roughly representative. The

I would consider a state-of-the-art optimizing compiler to be of equal or higher
complexity than a kernel. But it would be 1 in your scheme.

There are probably lots of other counter examples. How about a single-user
application that solves some incredibly complex problem?

Sure, there are always counterexamples, like there is always sniping.

BTW, it is not my scheme. I attributed it to Datamation (from decades ago,
the prehistoric mainframe age, as many today seem to think of it?).

The much simplified table was just something to start (from nothing) to
get an understanding of the flavour of distinctions. Counter-examples
don't really help anyone understand anything, because there is not yet any
structure to counter with the example(s). Do you have any rules and/or
generalizations to help the OP? It does no good to say "complicated,
complicated, you couldn't possibly understand" when someone asks for help.

I would be inclined to "cheat" if/when trying to classify your
counter-examples, which still would not do them justice, but might lessen
the disparity. Most people would consider compilers to be system level
stuff: because they deal with interfaces? to device models? file systems?
in their generalities, and not for just one specific application. One
might even argue that they are kind of multi-user, in that they have to
solve a wide class of problems, using the same approach(es). In fact, they
are sort of multi-user in that programmers compile using each others
shared dynamic data (headers, libraries, etc.). Whatever...

BTW, I am not sure that an optimizing compiler is more complex than a
(good) operating system kernel. There's a lot of tricky stuff in both.

For the "incredibly complex problem" we should probably be careful. Are
they incredibly complex because scientific research is lacking? theory is
lacking? new paradigms have yet to be designed? That is no longer
"programming" as the OP was asking about. I consider programming to be the
design and implementation of generally known methods to specific problems.
Like implementing a random number generator for a specific application,
using one of Knuth's texts. Otherwise one is doing research (like for a
PhD, or for a "real" patent, not a software hoax). Wouldn't you agree? Not
trying to be insulting, but I would consider programming generally to
require cleverness, not genius. Otherwise, most of us would be unemployed.

However, your definitions may differ... How would you help the OP?

If that was true then libraries would be a lot less popular than they are.

Huh? What kind of libraries? What does that have to do with someone
wanting to control things (as opposed to wanting to control people). Why
does someone start programming? Certainly not to solve world hunger.
 
A

Alex McDonald

Matt said:
How do we define systems programs? when we say systems
programming,
does it necessary mean that the programs we write need to
interact
with hardware directly? For example, OS, compiler, kernel,
drivers,
network protocols, etc...? Couple years ago, yes, I understand
this is
definitely true. However, as the software applications become
more and
more complicated, some people try to argue that. Some people
argue the
definition of systems programs depend on the level of
abstractions. I
heard people saying that web server is a systems software,
which I
feel confused. I think web server is an application software.
Yes,
other applications run on top of web server.

Please advise and discuss. thanks!!

Best start with the people rather than the end product. Now...

Systems programmers dislike end users. Users need software. Ergo
if the user specifies it, the systems programmer won't write it;
the application programmer does that.

Systems programmers only write programs for themselves or other
systems programmers. Rarely they will write programs to support
applications, but only under protest at the inefficency of the
applications running on their finely crafted code accessible only
from the command line. Systems programmers count in hex.

Application programmers like end users, and are only too
delighted to use a mouse to create a GUI. Efficency isn't a
primary consideration as long as the interface has shaded buttons
and the bitmaps look good together. Application programmers count
in decimal.

Systems programmers tend to eat high fat sugary foods, keep odd
hours and often have poor hygiene because they work alone and
rarely need to spruce up to attend meetings. None aspire to
management. Dyslexia, deafness and atrocious handwriting using
blunt pencils or leaky biros are common. Spell checkers are never
used, as word processors are considered applications. Large
stretches of the code they write are uncommented. Comments are
mainly for the amusement of other systems programmers, or to
illustrate a particularly clever technique. Variables are
normally named i or j, occasionally x and y; function names
contain the words foo and bar, very often together.

Application programmers prefer quiche and salads, work regular
hours and brush up regularly for the large numbers of meetings
with large numbers of other application programmers. Most have
management aspirations. All can handle a pen without inking their
fingers, are attentive, and can spell long words like
specification and acceptance criteria without using a spell
checker. All use a spell checker anyway, just in case. They write
code with comments on every line, and use simple techniques in
case they fall out of favour with management and are asked to do
maintenance. Variable names are often mistaken for comments, so
comments are coloured differently to avoid confusion, and the
word Variable is added to the end of the name just to make sure.
Function names normally contain the words Report or Total or
Function, very often together. They too are colour coded.

Systems programs are the things written by systems programmers.
Will that do?
 
R

Richard Steiner

Here in comp.lang.c,
Alex McDonald said:
Systems programmers count in hex.

[Snip]

Application programmers count in decimal.

I count in octal -- what does that make me? :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top