i don't know why you think the output would be non-linear.
text in the article says it is linear and the version
I have built also checked out as liner...
Besides, this is extremly simple circuit with just few components
it begs to be analyzed (highschool material). In fact, I may
use it as an interview question

(requires entry level engineering skill
such as finding, reading and understanding data sheet, checks the
most basic math skill and circuit analisys...):
this is not simple voltage divider made with passive components,
it uses voltage regulator chip.
datasheet for LM317L can be found using google of your choice
(nobody uses AskJeeves etc. anyway):
http://www.onsemi.com/pub/Collateral/LM317L-D.PDFWhen voltage output is selected, R3 is not used (open circuit).
Rest of the circuit resembles classic regulator as seen in datasheet.
The voltage output becomes:
Vout=1.25*(1+R5/(R2+R4))+Iadj*R5.
where 1.25V is regulator output between Vout and Adj terminals.
Since R5 is the only variable (Iadj is fixed and it's low value which can
also be found in the datasheet), this is nothing but simple linear
function (y=a*x+b) where:
y=Vout
a=(Iadj+1.25/(R2+R4))
x= R5
b=1.25
Clearly, to get linear output, R5 must be linear...
Values of the resistors are chosen to produce desired output ranges
and make use of standard resistor values. I've decided it's better to
keep it simple, and what is point in making something simple if the
components have hard to find values or one has to perform calibration
that can be messed up anytime somone borrows the unit.
(initial idea was to just use regulator, pot and pair of trim-pots but
one could set trim-pots to min value and overload circuit. this was
abandoned and you can see result).
when current output is selected, same linear voltage output Vout is
applied to R3 which is clearly fixed value. This means that output current
of the circuit is:
Iout = Iadj+1.25V/(R2+R4)+Vout/R3
where 1.25V is again regulator output between Vout and Adj terminals.
Since Vout is the only variable in the equation, this can be represented
as standard linear function y=a*x+b. For example:
y= Iout
a=1/R3
x=Vout
b=Iadj+1.25/(R2+R4)
because b can never be zero (unless output is not connected), this circuit can't produce very low output (in the neighbourhood of 0mA).