May the source be with you, but remember the KISS principle ;-)
Home Switchboard Unix Administration Red Hat TCP/IP Networks Neoliberalism Toxic Managers
(slightly skeptical) Educational society promoting "Back to basics" movement against IT overcomplexity and  bastardization of classic Unix

Linux Routing

News See Also Recommended Links


Lecture courses Reference RFCs
Changing hostname Linux route command Unix route command Static Routing  Routing    
Troubleshooting Multihoming   Quiz History Humor Etc


Kernel Routing Algorithm

Interior vs. Exterior Routing protocols

Routing Table

Static Routes

Selected routing algorithms


Routing table can be viewed using netstat -r (with host resolution) and netstat- rn (without)

Route command can be used to:

  1. Add a route # route add net tuna
  2. Add a default route # route add default tomato 1
  3. Delete a route # route delete net sword-r
  4. Lookup and display the route for a destination # route get
  5. Get routing reports continuously # route monitor
  6. Flush the routing table # route flush
  7. Add the multicast path for # route add `uname -n` 0
  8. Use the "route add net" command with the -netmask option to make the route command to take the netmask specified on the command line :

    # route add net 1 -netmask


Routing took place at the Internet layer of TCP/IP protocol.

  1. TCP/IP Layers
    1. Application Layer
    2. Transport Layer
    3. Internet Layer <- routing
    4. Network Interface Layer
  2. Hardware Layer.

A simple definition of routing is "learning how to get from here to there." (routes are both source and destination dependent; i.e., that knowing how to get there isn't enough, you have to know where you are starting from as well.) In some cases, the term routing is used in a very strict sense to refer only to the process of obtaining and distributing information ("learning"), but not to the process of using that information to actually get from one place to another (for which a different term, forwarding, is reserved). Since it is difficult to grasp the usefulness of information that is acquired but never used, we employ the term routing to refer in general to all the things that are done to discover and advertise paths from here to there and to actually move packets from here to there when necessary.

There are two types of routing: direct and indirect.

Kernel Routing Algorithm

When implementing routing Unix kernel:

  1. Checks local LAN for destination hosts. The kernel extracts the destination IP address from the IP datagram and computes the destination network number. The destination network number is then compared with the network numbers of all local interfaces (an interface physically attached to the system) for a match. If one of the destination network numbers matches that of a local interface network number, the kernel encapsulates the packet and sends it through the matching local interface for delivery.
  2. Checks routing table for matching IP host address. If no local interface network number matches the destination network number, the kernel searches the routing table for a matching host IP address.
  3. Checks routing table for matching network number. If no specific IP host address matches the destination IP address, the kernel searches the routing table for a matching network number. If found, the kernel sets the destination Ethernet address to that of the corresponding router. It completes the encapsulation of the packet, leaving the destination IP address unchanged, so that the next router will execute the routing algorithm again.
  4. Checks for a default entry in the routing table. If there is no matching network number in the routing table, the kernel checks for a default entry in the routing table. If found, the kernel encapsulates the packet, setting the destination Ethernet address to that of the default router, leaving the destination IP address unchanged, and delivers the packet through the interface that is local to the default router.
  5. If there is route to host, generate ICMP error message. If no matching address is found and no default router entry is found in the routing table, the kernel cannot forward the packet and an error message from ICMP is generated. The error message will state No route to host or network is unreachable.

The ICMP handles control and error messages. ICMP on a router or gateway sends reports of problems to the original source. ICMP also includes an echo request or reply that is used to test whether a destination is reachable or not. The ping command uses this protocol.

ICMP redirects are most commonly used when a host is using default routing. If the router determines a more efficient way to forward the packet, it redirects the datagram using the best route and reports the correct route to the sender.

The sending host's route table is updated with the new information. The drawback to this method of routing is that for every ICMP redirect, there is a separate entry in the sending host's route table. This can lead to a large route table. However, it also ensures that the packets going to all reachable hosts are taking the shortest route.

Common ICMP messages:

Interior vs. Exterior Routing protocols

A single routing protocol cannot efficiently handle all situations because networks can be connected in many different ways.

An autonomous system (AS) is a collection of networks and routers under a single administrative control. This broad definition was incorporated into the Internet in an attempt to reduce excessively large route tables.

An autonomous system number is a unique 16-bit address that is assigned by the Internet Corporation for Assigned Names and Numbers (ICANN).

An autonomous system's exterior routers maintain route tables by using autonomous system numbers that represent exterior routes because the numbers create unique paths. An autonomous system's interior routers also have interior route entries in their route tables for subnets within the organization.

There are two major types of routing protocols:

Interior Routing Protocols

Interior routing protocols pass route table information within an autonomous system (AS).T here are to major interior routing protocols:

Exterior Routing Protocols

An exterior routing protocol is a routing protocol that communicates routes between autonomous systems. EGP and the Border Gateway Protocol (BGP) are the two principal protocols that exchange route table information among autonomous systems.

Classless and Classful Routing Protocols

For routers in a variably subnetted network to properly update each other, they must send masks in their routing updates. Without subnet information in the routing updates, routers would have nothing but the address class and their own subnet mask to go on. Only routing protocols that ignore the rules of address class and use classless prefixes work properly with VLSM. Table below lists common classful and classless routing protocols.

Classful Routing Protocols Classless Routing Protocols
RIP Version 1 (distance vector) RIP Version 2 (distance vector)
EGP (distance vector) OSPF (link state)
BGP3 (path vector) IS-IS (link state)
BGP4 (path vector)

Routing Table

Routes are kept is a special table called routing table. The Unix kernel stores it in memory. It contains two types of entries:

Displaying the Route Table

To display the contents of a system's route table without interpreting the names of the systems, use the netstat utility with the -r and -n options:

# netstat -rn

Routing Table: IPv4
  Destination           Gateway           Flags  Ref   Use   Interface
-------------------- -------------------- ----- ----- ------ ---------        U         1  75150  bge0        U         1   7964  bge2          U         1      0  bge0
default              UG        1 783447              UH        5  79619  lo0

Introducing Route Table Entries

Routing table entries:

Static Routes

You can configure a route that does not change or time-out. This type of route is called a static route.

You can use the route utility to define a static direct route. A static route is a route that is not automatically removed by the in.routed process if a more efficient route is identified. The ifconfig utility initially builds the direct route entries when the network interface is configured during system startup. To view the results of the utility, perform the command: netstat -r

The localhost entry in the local routing table is a loopback route to the local host that is created when the pseudo interface is configured.

Configuring Static Routes Using route Utility

The route command enables manual manipulation of the route table The syntax of the command is somewhat complicated:

route [-fn] add|delete [net|host|default] destination gateway

With keywords add and delete the default for optional [net|host|default] troika is host.

For example, to add a direct static route between the systems alpha and beta, perform a command similar to the following:

# route add beta alpha
add host beta: gateway alpha

This is equivalent to:

# route add host beta alpha

To delete the route between beta and alpha, perform a command similar to the following:

# route delete beta alpha
delete host beta: gateway alpha

To define a default route using the system sigma , perform a command similar to the following:

# route add default sigma
add net default: gateway sigma

The route utility can also to retrieve information about a specific route. For example, to retrieve information about the default route:

# route get default

route to: default
destination: default
mask: default

gateway: sigma
interface: hme0

recvpipe sendpipe ssthresh rtt,ms rttvar,ms hopcount mtu expire
0 0 0 0 0 0 1500 0

To change the route table, use the change option with the route utility. For example, to change the default route from sigma to gamma, perform a command similar to the following:

# route change default gamma
change net default: gateway gamma

To continuously report any changes to the route table, route lookup misses, or suspected network partitionings, use the monitor option:

# route monitor
got message of size 124
RTM_DELETE: Delete Route: len 124, pid: 633, seq 1, errno 0,
locks: inits:
sockaddrs: <DST,GATEWAY,NETMASK> alphaext

To flush (remove) the route table of all gateway entries, use the flush option (only indirect routing table entries would be removed):

# route flush

192.168.9 beta done
two beta done
two alphaext done
default done

you can also flush the route table before any command with -f option:

# route -f add net alphaext
add net gateway alphaext

In case you accidentally deleted mulcast entry you can restore it manually (you can consult the command syntax in the /etc/rc2.d/S72inetsvc startup file). For example to add a route to the multicast address range of 224 through 239, perform the command:

# route add 224.0/4 'uname -n'

To define a route that uses a specific netmask, use the netmask option with the route utility. For example, to add a route to the network that uses a netmask of, perform the command:

# route add net deltaext -netmask
add net gateway deltaext

More concise way of doing the same would be to specify :

# route add net deltaext
add net gateway deltaext

Default routes

A default route is a route table entry that allows a host to define default routers to use if no other specific route is available. The default routers must be reliable. There is no need to define every reachable network. All indirectly connected packet destinations go to the default router.

Some disadvantages of default routing are:

A default route is a route table entry that defines the default routers to use if no other specific route is available. Default route entries can be either static entries or dynamic entries. The default routers must be reliable. You do not need to define every reachable network because datagrams that are addressed to non-local destinations use a default router in the absence of an explicit route.

Top Visited
Past week
Past month


Old News ;-)

[Nov 28, 2006] [SAGE] technical help with routing on Unix 10

I sent the following to sun-managers, but haven't gotten much help there.
I'm thinking this may be a more generic networking problem, so I'm hoping
one of you might be able to help.

I have what seems to be a weird problem with routing that I hope y'all can help

I have a Sun Fire V210 running Unix 10 with a recommended patch cluster a
couple of weeks old.

It's got 8 interfaces -- the four on board plus a quad gigaswift (ce) card.

[Nov 28, 2006] HOW TO INSTALL ROUTING IN Unix 10

I have already installed my Unix 10 Server, I was tryin to implement the routing in the file /etc/init.d/inetsvc (/etc/rc2.d/S98inetsvc) as in Unix 8.

!! this file does not exists!!

How install routings in Unix 10 6/06 ??


And this is why you should never mess with binary / system files but stick to configuration files. Editing rc.d scripts directory is very poor administration.

What you should be doing is looking into the routeadm(1M) command for starters. Further good readings are the manual pages for 'ifconfig(1M)' and 'in.routed(1M)'.

Unix 10 routing problems

Anyone have routing working on Unix 10?

Running S10_72 on a Dell Gx110 w/ 2 NICs. Trying to set it up to replace my Netgear router (and eventually configure IPv6 tunnel). having problems getting it to route packets. I turned off all of my ipfilters for debugging.

2 networks 10.10.1.x and 10.1.1.x no routing daemon, just static routes
Here are the parts of the ifconfig that matter, the output from routeadm and the routing table, along with a ping to hosts on each side and a tcpdump from the input interface elxl0 (the packets to be routed arrive here) the tcpdump on the side the packets should come out is empty (there are DNS packets and the like from the host, but no routed packets). What am I missing here?

inet netmask ffffff00 broadcast
ether 0:b0:d0:85:e0:b4
inet netmask ffffff00 broadcast
ether 0:a0:c9:98:1d:6b
# routeadm
Configuration Current Current
Option Configuration System State
------------------------------------------------------------ ---
IPv4 forwarding enabled enabled
IPv4 routing default (disabled) disabled
IPv6 forwarding disabled disabled
IPv6 routing disabled disabled

IPv4 routing daemon "/usr/sbin/in.routed"
IPv4 routing daemon args ""
IPv4 routing daemon stop "kill -TERM `cat /var/tmp/`"
IPv6 routing daemon "/usr/lib/inet/in.ripngd"
IPv6 routing daemon args "-s"
IPv6 routing daemon stop "kill -TERM `cat /var/tmp/`"

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ --------- U 1 26 iprb0 U 1 2 elxl0 U 1 0 iprb0
default UG 1 1 iprb0 UH 7 7281 lo0

PING 56 data bytes
64 bytes from icmp_seq=0. time=1.67 ms
---- PING Statistics----
1 packets transmitted, 1 packets received, 0% packet loss
round-trip (ms) min/avg/max/stddev = 1.54/1.61/1.67/-NaN
PING 56 data bytes
64 bytes from icmp_seq=0. time=0.659 ms
---- PING Statistics----
1 packets transmitted, 1 packets received, 0% packet loss
round-trip (ms) min/avg/max/stddev = 0.592/0.625/0.659/-NaN

tcpdump -vv -e -i elxl0
15:24:17.414252 00:c0:9f:20:16:a8 > 00:b0:d0:85:e0:b4, ethertype IPv4 (0x0800), length 98: IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], length: 84) > icmp 64: echo request seq 30213

Unix 8 Administrator's Guide Chapter 4 Network Configuration/Routing

Imagine that you are a courier, and your run always starts at the local courier depot. You're given a list of addresses, which are associated with a set of packages, and your goal is to deliver them in as little time as possible, subject to the following constraints:

If this seems like a fairly trivial task for a courier, consider how much more difficult the job would be if the following conditions prevailed:

This scenario describes the difficulties faced by the emergence of the Internet and the massive interconnections between hosts and networks. In order for a packet of data to be transferred from host A to host B, a physical path must be identified for the packet to travel.

There is no central lookup service that decides how to route each packet between all possible combinations of two hosts on the Internet (i.e., between the sender and the receiver). This means routes must be generated dynamically. (The only exceptions to this rule are certain situations where a predictable static route may be installed.)

When transferring data around the Internet or between subnets, intermediate hosts must be responsible for transferring packets between networks; these hosts are called routers and are responsible for routing packets between hosts, which can be separated by single subnets or by entire continents. To gain insight into how many routers a packet transfer may involve, let's use the traceroute command to display the "hops" required to connect from a host in Sydney, Australia, to the Sun Microsystems web server:

bash-2.03$ traceroute
Tracing route to []
over a maximum of 30 hops:
  1   184 ms   142 ms   138 ms
  2   147 ms   144 ms   138 ms
  3   150 ms   142 ms   144 ms
  4   150 ms   144 ms   141 ms []
  5   148 ms   143 ms   139 ms
  6   490 ms   489 ms   474 ms []
  7   526 ms   480 ms   485 ms []
  8   494 ms   482 ms   485 ms []
  9   483 ms   489 ms   484 ms []
 10   557 ms   552 ms   561 ms []
 11   566 ms   572 ms   554 ms []
 12   577 ms   574 ms   558 ms []
Trace complete.

Here, we can see that some 12 hosts are required to transfer packets between the sender and the receiver. In addition, the observed response times can be quite slow--often more than half a second. It is possible for attempted connections to time out. This can be very useful when trying to identify which intermediate host and/or network is having problems when your remote connection to a host half a world away suddenly dies!

In this section, we'll examine how Unix solves a number of the classic routing problems.

Static routing typically involves creating a direct physical connection between two hosts, where the implementation of dynamic routing would be wasteful or a security risk. For example, if your local network has three subnets that need to share data, a static route could be created between each router and the other two routers in the network. The number of specific routes required to allow data to flow seamlessly between networks is directly proportional to the square of the number of routers on the network. Every time a change is made to the network topology, these routes will have to be modified manually. If that sounds like too much hard work, consider the situation where it might be desirable: a secure database server that can be accessible only by knowing the route to the host and is not publicly announced. Instead of permitting route discovery, a static route is an appropriate technique here. This could be implemented by creating a point-to-point configuration using ifconfig on a secondary interface, as discussed in the network interface configuration section.

The alternative to static routing is dynamic routing, which involves two daemons: the routing daemon proper (in.routed) and the route discovery daemon (in.rdisc). The in.routed daemon implements the Routing Information Protocol, and is responsible for updating and managing entries in the kernel's routing tables. It uses UDP (port 520) for performing routing operations and operates on all network interfaces that have been plumbed and are identified as up.

If the /etc/notrouter file does not exist, and given that two or more operational interfaces can be found, the host begins to act as a router. Data can then be exchanged between data received on one interface, destined to be transmitted from another interface. For a local area network, the interface that connects to all local hosts is usually known as the internal interface, while the interface that is visible downstream to an ISP or another subnet is known as the external interface. By using packet filtering, it is possible to specify a set of rules governing what type (TCP or UDP) of packets can be transferred between interfaces and on which ports. This is obviously important for protecting local networks, since services that are available to local hosts may not be appropriate for public access.

The route discovery daemon, in.rdisc, implements the Internet Control Message Protocol (ICMP). In terms of route discovery, in.rdisc running on host systems listens for multicast broadcasts on the (ALL_HOSTS) address. These messages are prioritized, and the default router is selected based on its proximity to the host. On routers, in.rdisc broadcasts its availability using multicast on, and listens for requests on (ALL_ROUTERS). Hosts may request a router directly by broadcasting on

Unix 8 Administrator's Guide Chapter 4 Network Configuration

The kernel maintains a table of routes, constructed by the routing daemon, in.routed. The various routes that have been configured are always viewable by checking the routing statistics:

bash-2.03$ netstat -r
Routing Table: IPv4
Destination          Gateway              Flags Ref   Use    Interface
-------------------- -------------------- ----- ----- ------ ---------           austin                U        1      5  eri0            austin                U        1      0  eri0
localhost            localhost             UH      25 215051  lo0

Here, we can see there are two network routes available for packets on the primary Ethernet interface eri0: the network and the multicast network. In addition, the loopback interface (lo0) has the local host interface, which is commonly used for troubleshooting and testing. These routes are all IPv4; however, IPv6 routing details are also displayed:

Routing Table: IPv6
Destination/Mask            Gateway                     Flags Ref Use    If
--------------------------- --------------------------- ----- --- ------ -----
fe80::/10                   fe80::203:baff:fe04:a4e8    U       1      0 eri0
ff00::/8                    fe80::203:baff:fe04:a4e8    U       1      0 eri0
default                     fe80::203:baff:fe04:a4e8    U       1      0 eri0
localhost                   localhost                   UH      5     28 lo0

[Nov 15, 2006] Miscellaneous Unix notes

"Blackhole"/null routing a destination IP address:

route add destination_IP -blackhole

Note that this seems to work without the -blackhole flag, and can be used on most Unices.

All network traffic destined to destination_IP will not leave the network interface, as it is given a "next hop" of (localhost). Note that destination_IP can still reach the host, although response traffic will not reach destination_IP, making it appear that communication is broken.

Unix routing with multiple interfaces

In this example, we have an hme2 network interface with an IP address of, a network address of, and a subnet mask of The interface was initially enabled using the default subnet mask and broadcast address.

ifconfig hme2
hme2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet netmask ff000000 broadcast

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ --------- U 1 8 hme2

To correct the routing table:

1. Specify the correct subnet mask and broadcast address with ifconfig.
ifconfig netmask broadcast

2. Add an /etc/netmasks entry for the correct netmask to be used after system reboot.

Corrected routing table:

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ --------- U 1 1 hme2

[Jul 24, 2006] GigaOM " Open Source Router Launched

Vyatta, a San Mateo, Calif.-based start-up is close to releasing an open source router platform, that runs on standard x86 hardware and can perform equally well as some of the more commercial products. Vyatta plans to target the corporate market with its own devices, but anyone can download the software, officially called, the Vyatta Open Flexible Router (OFR), and roll their own … router.

Recommended Links

Google matched content

Softpanorama Recommended

Top articles


Some routing protocols descriptions from Cisco


Lecture Courses

Class Schedule and Reading Assignments (4197)

Lecture Slides and Notes (4197)

EE4074 Spring'97 Network Technology Sites

Index of publiccomputinginternetripelocal-irtraining

The Computer Communication and Applications Course Syllabus

Internet Technology Protocols and Services -- slides in PDF

IPng Mail Archive (IPng 190) Neighbor Discovery slides from WG meeting

ANS Papers and Drafts - Presentation Slides

204421 Computer Networks Class Schedule

Spring 1998 - CS 138c Special Topics in Networking Student Topics

CSc425525 Home Page -- good, contains slides

Cable Modems Myths and Reality

CSCI-3780 Course Page



Random Findings

LSU EE 7725-Interconnection Networks-Lecture Transparencies -- something too theoretical

Internet Routing Infrastructure Security (IRIS) -- Internet Routing Infrastructure Security (IRIS) This ARPA-sponsored program is exploring security for advanced Internet routing technology. Specifically, the program is developing security requirements, performing vulnerability analyses, and designing and developing security countermeasures for use with two routing systems. The Inter-Domain Routing Protocol (IDRP) is an ISO exterior routing protocol that will be deployed as a successor to BGP-4 in the Internet. Nimrod is a routing system, under development in the IETF, that unifies interior and exterior routing protocol features. This presentaroach adopted to perform the security requirements analysis portion of this project, and the results of this analysis.


Q1. The ______ command may be used to add or remove routes from the routing table.

a. netstat

b. rdisc

c. rip

d. route

A: d

Syntax: route [-fn] add|delete [host|net] destination [gateway [metric]]

Q2. ______ is a file that contains hostname or IP addresses of one or more routes to the network.

a. /etc/defaultrouter

b. /etc/inet/networks

c. /etc/gateways

d. /etc/hosts

Q3. If there are two IP addresses, or entries in the /etc/gateways file, ______ is enabled and the in.routed(RIP) or in.rdisc (RDISC) processes start.

a. ip_fw

b. ip_forwarding

d. no_ip_forwarding

A: b



Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy


War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes


Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law


Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D

Copyright © 1996-2021 by Softpanorama Society. was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to to buy a cup of coffee for authors of this site


The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the Softpanorama society. We do not warrant the correctness of the information provided or its fitness for any purpose. The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Last modified: March 12, 2019