About the proper way to deal with writers of computer virii and worms

Steven Landsburg proposes to execute writers of computer virii and worms. This is just an extreme expression of the general sentiment that threats to punish writers of computer virii and worms are an adequate way to plug security vulnerabilities, which allow those virii and worms to propagate.

My thesis is that this sentiment is wrong. It is horribly wrong.

When a burglar picks a lock and enters into a building without permission, he is punished (if caught). This is reasonable, because a burglar cannot pick more than one lock at the same time. Any damage he may be doing at a moment of time is limited to a single site. Besides, high quality locks are very expensive.

However, when there is a vulnerability in a software package in widespread use, a cracker has the power to pick the equivalent of one million locks at the same time, by writing a worm which exploits this vulnerability.

If we do not require the software writers to fix this vulnerability promptly by assigning to them responsibility for worm damage, then several installations are at risk. The risk is not only due to crackers. It is theoretically possible, even if rather improbable, for a PC to create automatically self-propagating software by corrupting existing software due, for example, to noise, soft errors (due to overclocking or overheating) or disk crashes.

Besides, the cost of deploying patches which fix the vulnerability, once it is discovered, is very low – unlike the cost of replacing a broken door lock.

Another analogy. Let’s say that a certain bridge was designed and built. The bridge can carry its designed load of pedestrians, cars and trucks as long as they pass on the road passing through it. But an hammer tap on the side would cause the bridge to immediately collapse. Obviously, the bridge designers did not do their job properly. Should we treat as criminal someone, who waits until the night (when there is no transportation on the bridge) and taps on the bridge’s side to trigger its collapse? Probably not, because he is saving us from false reliance upon a bridge, which might suddenly collapse if a strong wind threw a stone at its side.

Yet why do we treat as criminals crackers, who exploit vulnerabilities of widely used software to spread worms, whose payload has only nuisance value? Especially when the software vendor/s in question are not prompt in fixing the vulnerability in question.

35 years with computers

Jakob Nielsen’s Thirty years with computers reminded me that I am about two months shy of my 35th anniversary of computer usage.

My first computer was the CDC 6400, which served the computing needs of the Hebrew University in Jerusalem, Israel. The computer had a lot of magnetic core memory – 32K 60-bit words. That is 240K bytes (or 320K characters, as CDC 6400 represented each character in 6 bits). I communicated with it by means of punched cards, which spoke FORTRAN IV. It communicated with me by means of printouts, for which I had to wait an hour after submitting my punched cards.

The thing which I remember most from that time was the extremely limited power of the programming tools then available. It happened sometimes that I wanted to do something, but the language or the libraries just did not have the requisite feature to support what I wanted to do. Today, almost all languages and libraries are complete in this way.

My vision for year 2039 (that’s 35 years from now) is that the languages, to be used for communication between humans and computers, will be much more powerful. They will make huge strides toward the Software Engineering ideal of having a small change in specs always translate into a small change in the source code of the actual software. Any case, in which a small change in specs yields a big change in the final software’s source code, will be a major news item, a reason to invent a yet more powerful computer language, and lots of rejoicing by bored software developers and language lawyers.

Why is XML much more popular than LISP and Scheme?

As I read Extensible Programming for the 21st Century, I pondered the secret of success of XML. In a way, I am already using XML software (glade, the GUI editing tool, saves the edited GUI description in a XML file, which can later be read by a Python library and used to construct the GUI for a script).

After all, it can be considered to be just another syntactic representation of LISP or Scheme. For example, the transformation between
(+ 1 2)
and

<paren>
   <token name="+"/>
   <token name="1"/>
   <token name="2"/>
</paren>

is trivial.

My guess is that XML succeeds because it allows the developer to add types to S expressions and to constrain them and their contents. This is like imposing hard-typedness on variables and/or their values in a conventional programming language. XML works because the developer can give different names to his expressions besides the equivalent of naming every tag <paren>.

As a proof of concept, it may be a good idea to develop a XML representation of a script in a popular scripting language (such as Python), along with code for transforming the script between its language and the language’s XML representation.

Advice to platform developers

If you are developing a platform or framework or hardware or OS and want other people to develop applications on top of your creation, then the following will make it easier for them and save you from being cursed by your developers:

  1. Ability to script all steps involved in building software.
  2. Ability to run script-based regression testing.
  3. Make your source code available to the developers, so that they can fix bugs which kill their applications, work around annoying limitations which you did not realize, and in general avoid the Stallman’s Printer Driver syndrome.
  4. Make it possible for people with limited budgets to participate in the party, because cool ideas and money do not necessarily go together.
  5. Build in logging and debug support.
  6. Training for developers – courses.
  7. Mailing lists and Web forums for your developers.
  8. Excellent documentation, with several examples, is mandatory!
  9. Mechanism for reporting runtime failures. Due to psychological reasons, it must be as easy and pleasant as possible for software developers to activate it in their software.

The above checklist was put together at November 2001 after having using few platforms for developing cellular applications, which drove me crazy by their utter failure to follow the above principles. I won’t mention names here but my resume is available in my Web site…

Do you have a time machine on your desk?

If we define time machine as an apparatus, which can transfer information from a possible future to the past – does a PC, which is sufficiently powerful to run simulations (i.e. has at least 4K memory), meet this definition?

Consider the following.

You want to know what will a potential future be, if you choose a certain course of action. This information will allow you to decide if to follow this course of action or a different course of action.

You develop (or pay someone else to develop) a program which simulates the future to the level of detail which you need. You run the program on your PC and analyze the simulation results. Finally you decide if you want this future or some other future.

However, simulating the future is philosophically equivalent to having a look at the future. Of course, you’ll not see everything in the future. But a time machine would not transfer from the future to the past every detail about the future world. Both PC and time machine will tell you as much as you need to know about the future. Sometimes less than you need, due to fog (time machine) or numerical difficulties due to chaotic regions in the simulation (PC).

Using welfare to restructure economy

Previously I wrote about the make-work problem of developed countries’ economics. In brief, the problem is that to produce the needs of a population, only small percentage (i.e. much less than 100%) needs to work. Thus, a system is needed to:

  1. Distribute the fruits of the producers’ labor among the entire population.
  2. Discourage people from being freeloaders incapable of doing productive work should this ever be necessary.
  3. Allow people to choose to work more (or make effort in another socially acceptable way) in exchange for more luxurious lifestyle.
  4. Develop and maintain excess capacity to work. This excess will allow the population to recover quickly from disasters.

There are some possible solutions:

  1. The conventional solution is to use advertising to develop artificial demand, and to get people to work to meet this artificial demand. I wrote elsewhere about some consequences of this solution.
  2. A better solution is to let people work in smaller and less efficient production units (factories, farms, or whatever) if they cannot pay for the products of bigger production units. On the other hand, people may find themselves working so much and get so tired that they cannot get ahead by studying.
  3. Even better system is to get people, who don’t have a job, to spend time learning something which will improve their productivity in the future.

The first two solutions are such that no special mechanisms are needed to cause cash to flow in a way which holds them together. This is why several economies implement them. The third solution needs special mechanisms to get goods to flow from the producers to the students, as there is no direct benefit to the producers from the fact that students spend time studying.

Now, I would like to propose a solution to this problem.

Welfare – both taxing of high incomes and handing out of money to people with low incomes – is now an established and accepted part of several economies. The welfare systems do a lot and get abused a lot.

My proposal is to replace existing income-based criteria for getting welfare by willingness to spend time studying something new.

Under this proposal, anyone, who did not (or was too lazy to) find a job, can get money for studying something. Welfare applicants would be evaluated to get a recommended course of study. However, they will then be free to study whatever they wish, at least some of their time.

Single mothers would be provided with services which look after their children while they study. People, who have learning disabilities, will be catered to by special methods of instruction, matched to their preferred studying style.

Just by studying, people would be able to get a minimum level if income. Certain subjects, which are deemed to be in demand, may carry higher pay tag. People, who study those subjects, will get more money while they study them.

Another point of view on current economic situtaion in developed countries

Let’s assume that thanks to advances in technology, it is sufficient to support the basic needs – food, clothes, shelter, medicine – of a 1,000,000 people population by the efforts of 10,000 people working normal work weeks.

This leaves 990,000 people unemployed. Applying the current economic model of requiring people to work in order to get goods and services would mean that 990,000 people would die of famine or illness even though there are resources to keep them alive and well. There are possible good and bad solutions to the problem, and several of them were used, to varying degrees, and for better or worse, in the world’s economies:

  1. The 10,000 people are made slaves of the entire population. They are forced to work and support the other people. For example, by means of high income tax and high sales tax (or VAT) – accompanied by generous welfare handouts to people without jobs.
  2. Make work. People without jobs persuade some of the 10,000 job holding people to part with some of their money, to buy doodads and fake services. This can be carried out by means of religious brainwashing, advertisements, and educating children to consume.
  3. People who have a job – work. People who don’t have a job go to school and study yet another occupation. Some of the studies are from books and other people. Other studies are performed on nature itself and known as ‘research’. Someday they may have a job which utilizes what they learned. But even if not, they get paid for the time they study. Today’s universities are an example of this.
  4. Special kind of make-work: deploy smaller manufacturing plants, which need more labor per unit of produce, but can be operated by more people. An example: small high-labor organic farms operating next to big farms, which save labor by using all kinds of agricultural machines. People who find a job work for a large concern. People who don’t find a job – operate their own farm and sell its produce. The disadvantage is that the extra labor leaves them with less time for studies.

I believe that the best system is the one in which people either have jobs or study or mixture of both. However, I don’t see yet a good solution how to construct an economic system, which transfers value from the 10,000 workers (in the above example) to those of 990,000 who study and who exercise wisdom in their choice of subjects to study.

What happens if we cross physics with Scheme?

The data structures in Scheme (and for that matter, also in Lisp) can be used to model different realities. Functional programming corresponds to closed systems, which evolute in time without interaction with their surroundings beyond initial conditions and harvesting of computation results. Imperative programming corresponds to open systems, which interact with their surroundings and their state contains a record of such interactions which occurred in the past.

So I am wondering whether additional models of reality can be investigated by means of Scheme. Such as open systems, which hold memory of both past and future events.

In my Google search, I found only the following:
SCMUTILS Reference Manual, which is referred to by Christopher Browne’s Web Pages. However SCMUTILS is not what I am looking for.

Source of inspiration: chapter 3 of the SICP 2nd edition.

What is wrong with developed countries' economic systems and how to fix it

Thought experiment

A thought experiment illustrating what is wrong with the economics
of today’s developed countries.

You built a space station which has room for one million inhabitants.
You are its BDFL (Benevolent Dictator For Life) and you are responsible
for initial allocation of property rights among the settlers coming
to live in your space station.

You already paid up all inventors for all patents being used by the
space station, and you are licensed to do whatever you want with all
relevant patents as long as you do it in the space station.

The space station is highly automated. Everything is recycled and
all energy sources are renewable. The space station is environmentally
friendly in that it does not pollute the space with any un-recyclable
trash.

Human labor is needed mostly to repair and improve machinery.

The employment needs of the space station are as follows.
– 1000 engineers and technicians to maintain the food and air production
machinery.
– 1000 engineers and technicians to support the energy collection,
distribution and disposal (in the form of cooling) systems.
– 10000 highly trained medical practitioners, who attend to diseases
of the general population.

– 10000 workers of all trades involved in housing construction and
maintenance.
– 1000 workers to maintain the cloth production facilities.

In other words, 23000 people are sufficient to support the basic needs
of 1,000,000 people.

The question now is what system is to be used to fairly “distribute the
income” among all inhabitants of the space station?

If the 1000 maintainers of the food and air production facilities “own”
the facilities and earn all profits from selling food and air, how will
other people (besides the other 22000 who have other jobs) pay for the
food and air?

The communist solution would make those 1000 maintainers slaves who work
to their best ability, and get only their share of food and air, like
everyone else in the space station.

If people don’t have to work for their food, air, housing, clothes
and medical attention – the spacestation will become full with
freeloaders. Those freeloaders would prefer to follow other interests
than contributing to the maintenance of the space station. So there
must be some relationship between work and benefits.

On the other hand, if there are no jobs for most of the population, how
can they prove that they are not freeloaders in spirit?

How the problem is being solved by today’s Earth

The way the developed countries of the Earth solve the above problem
is as follows.
1. More than 2.3% of the population are still needed to provide the
basic needs of the whole population.
2. Several jobs are essentially “make work”. Entertainment, fashion,
religion officials, advertising, competition of brands which are
essentially the same, tourism, spectator sports, laws which stand
in the way of utmost economic efficiency.
3. Taxing the income of producers and using some of the proceeds to
support non-producers.

Historically, any “excess prosperity” was disposed of by means of
wars. Nowadays, as wars went out of fashion, spectator sports substitute
for wars.

Disadvantages of today’s solution

When people must prove they can work by actually hold a job in order
to get life’s necessities and luxuries, jobs must be created even if
by artificial means.
When jobs need to be artificially created, demand for the work must
be pushed up artificially.
Demand is pushed up artificially when people are brainwashed into
buying goods and services which they don’t really need, and even going
into debt for this purpose.

When people are not in the mood of buying goods, economic depression
sets in and people lose jobs and are impoverished – even if there is
plenty of food and other life’s necessities.

Proposed solution: smarter make-work

We must recognize the fact that large part of the economic activity
in developed countries is make-work with no real value. We must also
free ourselves from the ideological constraints of Marxism, Communism,
and their capitalistic counterparts.

Once we have passed this intellectual hurdle, the following solution
presents itself (described in the context of the spacestation).

The 1000 engineers and technicians, needed to maintain the food and air
machines, need say 20 years to train for their jobs. Let’s pay them
good salaries also for the years they spend training. We’ll also allow
them to retire after one year of actual work. Let’s also train also
a group of replacement workers, who will pitch in if there is an
emergency which requires coordinated work of more than 1000 workers.

Then each one of 40000 inhabitants has something to do for 21 years
(20 years of training; half of them will have one year of actual work,
and the other half will be prepared for “reserve duty”).

We have similar arrangements for all other essential professions.
Given that people need extra skills to cope with emergencies, it
is possible for all of them to be as busy as they like to doing
(by learning or working) something which is of value to the society.

In short, everyone will be paid also for the time he/she spends
training for his/her job.

Industrious people will spend more time learning new skills, and they
will be paid better and be able to enjoy luxuries. Less energetic
people will spend less time learning, and they’ll be paid proportionally
less. But this is fine as this was by their choice.

ניסוי מחשבה

ניסוי מחשבה הממחיש מה דפוק במערכת הכלכלית של הארצות המפותחות של ימינו.
בנית תחנת חלל שיש בה מקום למיליון תושבים.
הינך הדנל”ח (דיקטטור נדיב לכל החיים) והינך אחראי להקצאה ההתחלתית של זכויות הקניין בין המתיישבים שבאים לחיות בתחנת החלל שלך.
כבר שילמת לכל הממציאים תמורת כל הפטנטים המשמשים בתחנת החלל, וקבלת רשיון לעשות מה שאתה רוצה בכל הפטנטים הרלבנטיים כל עוד אתה עושה זאת בתחנת החלל.
תחנת החלל הינה אוטומטית כמעט לחלוטין. כל דבר ממוחזר וכל מקורות האנרגיה הינם מתחדשים. תחנת החלל היא ידידותית לסביבה במובן הזה שהיא אינה מזהמת את החלל באשפה בלתי ניתנת למחזור.
עבודה אנושית דרושה בעיקר לתיקון ולשיפור המכונות.
צרכי התעסוקה של תחנת החלל הם כדלקמן.
  • 1000 מהנדסים וטכנאים כדי לתחזק את המכונות שמייצרות אוכל ואוויר.
  • 1000 מהנדסים וטכנאים לתמיכה במערכות לאיסוף, ביזור וסילוק (ע”י קירור) אנרגיה.
  • 10000 אנשי רפואה שעברו הכשרה מעמיקה, שמטפלים במחלות של האוכלוסיה הכללית.
  • 10000 עובדים בכל המקצועות הקשורים לבניית בתים ולתחזוקתם.
  • 1000 עובדים לתחזוקת המפעלים לייצור בדים.
במילים אחרות, 23000 אנשים מספיקים לתמיכה בצרכים הבסיסיים של 1,000,000 אנשים.
השאלה עכשיו היא באיזו שיטה להשתמש כדי “לחלק את ההכנסות” בצורה הוגנת בין כל תושבי תחנת החלל?
אם 1000 המתחזקים של המכונות לייצור אוכל ואוויר יהיו “הבעלים” שלהן וישתכרו את כל הרווחים ממכירת אוכל ואוויר, איך ישלמו אנשים אחרים (חוץ מה-22000 שיש להם עבודות אחרות) עבור האוכל והאוויר?
הפתרון הקומוניסטי יהיה להפוך את אותם 1000 המתחזקים לעבדים, שיעבדו כמיטב יכולתם, אבל יקבלו רק את חלקם באוכל ובאוויר, כמו כל אחד אחר בתחנת החלל.
אם אנשים אינם חייבים לעבוד תמורת האוכל, אוויר, מגורים, בגדים וטיפול רפואי – תחנת החלל תתמלא בנצלנים שחיים על חשבון אחרים. נצלנים אלה יעדיפו להעביר את זמנם בנושאי עניין אחרים מאשר תרומה לתחזוקת תחנת החלל. כך שחייב להיות קשר זה או אחר בין עבודה והטבות.
מצד שני, אם אין עבודה לרוב האוכלוסיה, איך יוכלו להוכיח שהם לא נצלנים בכוח.

איך נפתרת הבעיה בכדור הארץ של ימינו

הדרך שבה ארצות מפותחות פותרות את הבעיה הנ”ל היא כדלקמן.
  1. יותר מ-2.3% מהאוכלוסיה עדיין דרושים כדי לספק את הצרכים הבסיסיים של האוכלוסיה הכוללת.
  2. עבודות רבות הן בבסיסן “עבודה יזומה”. בידור, אופנה, כהני דת, פרסום, תחרות בין מותגים שהינם עקרונית זהים, תיירות, ענפי ספורט שיש להם קהל, חוקים שעומדים בניגוד ליעילות כלכלית מקסימלית.
  3. מיסוי ההכנסה של היצרנים ושימוש בחלק מההכנסות לתמיכה בלא-יצרנים.
היסטורית, כל “רווחה עודפת” סולקה ע”י מלחמות.כיום, מכיוון שמלחמות יצאו מהאופנה, ספורט שיש לו קהל ממלא את מקומן.

חסרונות של הפתרון של ימינו

כאשר אנשים חייבים להוכיח, שהם מסוגלים לעבוד, ע”י החזקה בג’וב כדי להנות מצרכי ומותרות חייהם, יש צורך בעבודה יזומה.
כשצריך עבודה יזומה, צריך גם לקדם באופן מלאכותי את הביקוש לתוצרי העבודה היזומה.
ביקוש מקודם באופן מלאכותי כאשר שוטפים את מוחותיהם של הבריות, כך שיקנו טובין ושרותים, שאינם באמת דרושים להם, ואפילו ייכנסו לחובות למטרה זו.
כאשר אנשים אינם במצב רוח של קניית טובין, הכלכלה נכנסת לשפל, ואנשים מאבדים ג’ובים ונהיים מרוששים – אפילו אם יש שפע של אוכל ומצרכים חיוניים אחרים.

פתרון מוצע: עבודה יזומה יותר חכמה

אנו צריכים להכיר בעובדה, שחלק גדול מהפעילות הכלכלית בארצות מפותחות הינו עבודה יזומה ללא ערך ממשי. אנו צריכים גם לשחרר את עצמנו מהכבלים האידיאולוגיים של מרקסיזם, קומוניזם והמקבילים הקפיטליסטיים שלהם.
ברגע שעברנו את המכשול האידיאולוגי הזה, הפתרון הבא מתבקש מאליו (מתואר בהקשר של תחנת החלל).1000 המהנדסים והטכנאים, הדרושים לתחזוקת מכונות האוכל והאוויר, צריכים נגיד 20 שנים להכשרתם לעבודה. הבה נשלם להם משכורות טובות גם עבור השנים שבהן הם מכשירים את עצמם לעבודה. כמו כן, נאפשר להם גם לצאת לגימלאות לאחר שנה אחת של עבודה בפועל. נכשיר גם קבוצה של עובדים מחליפים, שייכנסו לעובי הקורה אם יש מצב חרום שדורש עבודה מתואמת של יותר מ-1000 עובדים.
ואז יהיה לכל אחד מה-40000 תושבים מה לעשות במשך 21 שנים
(20 שנות הכשרה; חצי מהם יעבדו בפועל שנה אחת, והחצי השני יהיו במצב הכן ל”שרות מילואים”).
יש לנו סידורים דומים עבור כל ההתמחויות החיוניות.
נתון שאנשים זקוקים למיומנויות נוספות כדי להתמודד עם מצבי חרום, ניתן לארגן עניינים כך שכל אחד יהיה עסוק כמה שירצה ע”י עשיית (לימוד או עבודה) משהו שיש לו ערך לקהילה.
בקיצור, כל אחד יקבל תשלום גם עבור הזמן שהוא/היא משקיעים בהכשרה מקצועית.
אנשים חרוצים ישקיעו יותר זמן בלימוד מיומנויות חדשות, ויקבלו תשלום גבוה יותר ויוכלו להנות מחיי מותרות. אנשים עם פחות מרץ ישקיעו פחות זמן בלימודים, ויקבלו בהתאמה פחות כסף. אבל זה בסדר, כי זה בא מבחירתם החופשית.

Interaction between evolution and time machines

Several years ago I speculated about interplay between evolution and time machines. What happens in a world in which both evolution and time machines play significant roles?

So far, the only piece I saw which attempts to address this issue, is the one which I wrote at https://www.zak.co.il/ideas/stuff/opinions/eng/evol_tm.html

פעולת גומלין בין אבולוציה ומכונות זמן
לפני שנים רבות העליתי השערות על פעולת הגומלין בין אבולוציה ומכונות זמן. מה קורה בעולם, שבהתפתחותו לקחו חלק נכבד גם אבולוציה וגם מכונות זמן?
עד כה, המקום היחידי שראיתי, ושמנסה להתמודד עם הנושא, הוא שבו כתבתי ב: https://www.zak.co.il/ideas/stuff/opinions/eng/evol_tm.html