Fascinating interview by Richard Stallman on Russia TV

M

Mark Tarver

http://www.gnu.org/philosophy/stallman-kth.html

RMS lecture at KTH (Sweden), 30 October 1986

(Kungliga Tekniska Högskolan (Royal Institute of Technology))
Stockholm, Sweden

Arranged by the student society
“Datorföreningen Stacken”
30 October 1986

[Note: This is a slightly edited transcript of the talk. As such it
contains false starts, as well as locutions that are natural in spoken
English but look strange in print. It is not clear how to correct them
to written English style without ‘doing violence to the original
speech’.]

It seems that there are three things that people would like me to talk
about. On the one hand I thought that the best thing to talk about
here for a club of hackers, was what it was like at the MIT in the old
days. What made the Artificial Intelligence Lab such a special place.
But people tell me also that since these are totally different people
from the ones who were at the conference Monday and Tuesday that I
ought to talk about what's going on in the GNU project and that I
should talk about why software and information can not be owned, which
means three talks in all, and since two of those subjects each took an
hour it means we're in for a rather long time. So I had the idea that
perhaps I could split it in to three parts, and people could go
outside for the parts they are not interested in, and that then when I
come to the end of a part I can say it's the end and people can go out
and I can send Jan Rynning out to bring in the other people. (Someone
else says: “Janne, han trenger ingen mike” (translation: “Janne, he
doesn't need a mike”)). Jan, are you prepared to go running out to
fetch the other people? Jmr: I am looking for a microphone, and
someone tells me it is inside this locked box. Rms: Now in the old
days at the AI lab we would have taken a sledgehammer and cracked it
open, and the broken door would be a lesson to whoever had dared to
lock up something that people needed to use. Luckily however I used to
study Bulgarian singing, so I have no trouble managing without a
microphone.

Anyway, should I set up this system to notify you about the parts of
the talk, or do you just like to sit through all of it? (Answer:
Yeaaah)

When I started programming, it was 1969, and I did it in an IBM
laboratory in New York. After that I went to a school with a computer
science department that was probably like most of them. There were
some professors that were in charge of what was supposed to be done,
and there were people who decided who could use what. There was a
shortage of terminals for most people, but a lot of the professors had
terminals of their own in their offices, which was wasteful, but
typical of their attitude. When I visited the Artificial Intelligence
lab at MIT I found a spirit that was refreshingly different from that.
For example: there, the terminals was thought of as belonging to
everyone, and professors locked them up in their offices on pain of
finding their doors broken down. I was actually shown a cart with a
big block of iron on it, that had been used to break down the door of
one professors office, when he had the gall to lock up a terminal.
There were very few terminals in those days, there was probably
something like five display terminals for the system, so if one of
them was locked up, it was a considerable disaster.

In the years that followed I was inspired by that ideas, and many
times I would climb over ceilings or underneath floors to unlock rooms
that had machines in them that people needed to use, and I would
usually leave behind a note explaining to the people that they
shouldn't be so selfish as to lock the door. The people who locked the
door were basically considering only themselves. They had a reason of
course, there was something they thought might get stolen and they
wanted to lock it up, but they didn't care about the other people they
were affecting by locking up other things in the same room. Almost
every time this happened, once I brought it to their attention, that
it was not up to them alone whether that room should be locked, they
were able to find a compromise solution: some other place to put the
things they were worried about, a desk they could lock, another little
room. But the point is that people usually don't bother to think about
that. They have the idea: “This room is Mine, I can lock it, to hell
with everyone else”, and that is exactly the spirit that we must teach
them not to have.

But this spirit of unlocking doors wasn't an isolated thing, it was
part of an entire way of life. The hackers at the AI lab were really
enthusiastic about writing good programs, and interesting programs.
And it was because they were so eager to get more work done, that they
wouldn't put up with having the terminals locked up, or lots of other
things that people could do to obstruct useful work. The differences
between people with high morale who really care about what they're
trying to do, and people who think of it as just a job. If it's just a
job, who cares if the people who hired you are so stupid they make you
sit and wait, it's their time, their money but not much gets done in a
place like that, and it's no fun to be in a place like that.

Another thing that we didn't have at the AI lab was file protection.
There was no security at all on the computer. And we very consciously
wanted it that way. The hackers who wrote the Incompatible Timesharing
System decided that file protection was usually used by a self-styled
system manager to get power over everyone else. They didn't want
anyone to be able to get power over them that way, so they didn't
implement that kind of a feature. The result was, that whenever
something in the system was broken, you could always fix it. You never
had to sit there in frustration because there was NO WAY, because you
knew exactly what's wrong, and somebody had decided they didn't trust
you to do it. You don't have to give up and go home, waiting for
someone to come in in the morning and fix the system when you know ten
times as well as he does what needs to be done.

And we didn't let any professors or bosses decide what work was going
to be done either, because our job was to improve the system! We
talked to the users of course; if you don't do that you can't tell
what's needed. But after doing that, we were the ones best able to see
what kind of improvements were feasible, and we were always talking to
each other about how we'd like to see the system changed, and what
sort of neat ideas we'd seen in other systems and might be able to
use. So the result is that we had a smoothly functioning anarchy, and
after my experience there, I'm convinced that that is the best way for
people to live.

Unfortunately the AI lab in that form was destroyed. For many years we
were afraid the AI lab would be destroyed by another lab at MIT, the
Lab for Computer Science, whose director was a sort of empire builder
type, doing everything he could to get himself promoted within MIT,
and make his organization bigger, and he kept trying to cause the AI
lab to be made a part of his lab, and nobody wanted to do things his
way because he believed that people should obey orders and things like
that.

But that danger we managed to defend against, only to be destroyed by
something we had never anticipated, and that was commercialism. Around
the early 80's the hackers suddenly found that there was now
commercial interest in what they were doing. It was possible to get
rich by working at a private company. All that was necessary was to
stop sharing their work with the rest of the world and destroy the MIT-
AI lab, and this is what they did despite all the efforts I could make
to prevent them.

Essentially all the competent programmers except for me, at the AI lab
were hired away, and this caused more than a momentary change, it
caused a permanent transformation because it broke the continuity of
the culture of hackers. New hackers were always attracted by the old
hackers; there were the most fun computers and the people doing the
most interesting things, and also a spirit which was a great deal of
fun to be part of. Once these things were gone, there is nothing to
recommend the place to anyone new, so new people stopped arriving.
There was no-one they could be inspired by, no-one that they could
learn those traditions from. In addition no-one to learn how to do
good programming from. With just a bunch of professors and graduate
students, who really don't know how to make a program work, you can't
learn to make good programs work. So the MIT AI lab that I loved is
gone and after a couple of years of fighting against the people who
did it to try to punish them for it I decided that I should dedicate
my self to try to create a new community with that spirit.

But one of the problems I had to face was the problem of proprietary
software. For example one thing that happened at the lab, after the
hackers left, was that the machines and the software that we had
developed could no longer be maintained. The software of course
worked, and it continued to work if nobody changed it, but the
machines did not. The machines would break and there would be no-one
who could fix them and eventually they would be thrown out. In the old
days, yes we had service contracts for the machines, but it was
essentially a joke. That was a way of getting parts after the expert
hackers from the AI lab fixed the problem. Because if you let the
field-service person fix it it would take them days, and you didn't
want to do that, you wanted it to work. So, the people who knew how to
do those things would just go and fix it quickly, and since they were
ten times as competent as any field service person, they could do a
much better job. And then they would have the ruined boards, they
would just leave them there and tell the field service person “take
these back and bring us some new ones”.

In the real old days our hackers used to modify the

read more »...

Perhaps as an antidote

http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi

Mark
 
E

Emmy Noether

"Democracy is sick in the US, government monitors your Internet"

Enjoy .....

In this video, Stall man makes 4 promises to public but stalls on 2nd
of them.




1/ Freedom to Run to the Program
2/ Freedom to study the source code, you control it <------ Software
is a puzzle and it must be explained to be able to do that, its like
a
lock
3/ Freedom to help your neightbors, share with them
4/ Freedom to contribute to your community


Software is a puzzle and it must be explained to be able to do that,
its like a lock


"to MAKE SURE you get the four freedoms"


He is WRONG !!! He has not made sure. He has not taken the first
steps.


Software architecture must be documented. A model minimal release
must
be given. If it takes too long to document the program by writing in
Latex, then he can write by hand or make an video with camera on the
paper and he can talk.


Mackenzie, bring a properly written documentation by FSF for example
on emacs of gcc. I want to see where RMS got his ideas ? Did he
invent
all of them himself ? Is he giving proper references to the sources
of
the ideas ? Is that plagiarism ?

I am sick of such jews/zionists like RMS, Roman Polansky, Bernard
Madoff, Larry Ellison (he had to pay 100K in court to a chinese girl
he screwed), Stephen Wolfram, Albert Einstein spreading anti-semitism
by their flagrant unethical behaviour.


If you use someone else's ideas, give reference. Dont try to portray
yourself falsely as a genius by hiding sources and weaving rosy false
pictures of being a victim or born out of wedlock. you went to school
and got good education. you got insights from your community and good
mentorship from other jews in aggressive networking in the jews like
other communities dont have.


These are facts. Thats why these people dont stand to scrutiny and
questioning.


Thanks for your correction. Updated my site.



Write a good documentation using pencil and scan that helps newbies
enter the field.

If it is not there, you will be subject of perpetual criticism and no
thanks.
 
D

David Kastrup

Emmy Noether said:
In this video, Stall man makes 4 promises to public but stalls on 2nd
of them.




1/ Freedom to Run to the Program
2/ Freedom to study the source code, you control it <------ Software
is a puzzle and it must be explained to be able to do that, its like
a
lock
3/ Freedom to help your neightbors, share with them
4/ Freedom to contribute to your community


Software is a puzzle and it must be explained to be able to do that,
its like a lock

There is no unfreedom involved here. Freedom does not hand you a free
ride. Only a free road.
 
E

Emmy Noether

Some entity, AKA David Kastrup <[email protected]>,
wrote this mindboggling stuff:
(selectively-snipped-or-not-p)

No one asks for a free ride. A free road is good enough. If RMS used
other
people's free roads (gnu is not the first free thing. the first free
thing is
what he got at AI labs at TAX Payer money. I read his interview where
he said
that the hackers would break into professor's offices. Perhaps we do
the same
to him and break into his FSF office and leave a "friend" note we came
to get
the docs he has not released.) which has proper signs, proper
references, and
he could ask profs proper questions, and get straight answers, he must
do the
same in return.

The concise answer: We want a free road but not a free puzzle.
Perhaps, next time
when he is sick he take his DNA code and parse it using bison.

Now, dont run away from this argument and bring each and every of the
boys from his
mailing list to tackle this question. He is a manager and he can put
the volunteers
to the task of documenting, illuminating and revealing the operation
of his softwares
and its evolution.

He owes it to others [just like he got for free , I bet ya he could
never afford any of his machines on his own money at that time when
they were so rare so it must be public money. Even a company like IBM
gets public funding. Its all issue of ethics, not of free software.
Its issue of two way road. Or else our society would die. People all
away in Africa are beginning to agitate from the theft of their
resources and evolutionary time by europeans led by jews and so you
gotta give them back by fully disclosing technologies. I know you can
bribe say a big player like india. We dont want anti-semitism to
spread and want the same ethical requirements for everyone.] to
describe the algorithms used, references, or else, describe them if he
dont want to give references. He need to give priorty to the past
undocumented tools. Automatically, more volunteers will come. Right
now, the mistrust of Richard Stall man and FSF is growing everywhere.
Strength of my arguments stand on their validity.

I repeat, no one wants a free ride. We want a free road that you
seemed to offer. But we dont want a free puzzle. Or else, ask him to
decode his own DNA alone in reasonable time. Its nothing but a code.
You know, nowdadys many 'people' are used to get everything on a platter
any mental incovieniences are circumvented as much as possible, so is
any try for independent thinking about anything strongly dissuaded.

The last 25 years, since click-tah-icon-software emerged
"the dumbing down of programming" [1] has been on a rampage.

[1]http://www.salon.com/21st/feature/1998/05/cov_12feature.html
 
E

Emmy Noether

The XEMACS programmers have documented in writing that Richard
Matthews Stallman asked them to explain every single line of code.

They got exasperated and would explain him blocks.

I suspect that they were playing the same game as him - perhaps giving
him the same medicine.

If he was NEEDY of an explanation of every single line, isn't it
UTTERLY SHAMELESS of him to deny others similar information and give
them such a puzzle ?

We have the right to tell the people what it really is all about.

By writing the GNU license, he eliminated the competition only from
those one-in-a-million who were persistent enough to read his code and
figure it out.

This is because by not documenting and describing his softwares, he
ensured that there is little chance that the multitude would be able
to take the code and do anything with it.

But by writing the GNU license, he made sure that those few who can
understand it cant take it away and build on it.

An new type of license is needed that requires concurrent
documentation with each release, even if hand-written. Scans can be
put together in a pdf and diagrams drawn with hand.
 
R

Rui Maciel

Emmy Noether wrote:

Mackenzie, bring a properly written documentation by FSF for example
on emacs of gcc. I want to see where RMS got his ideas ? Did he
invent
all of them himself ? Is he giving proper references to the sources
of
the ideas ? Is that plagiarism ?

I am sick of such jews/zionists like RMS, Roman Polansky, Bernard
Madoff, Larry Ellison (he had to pay 100K in court to a chinese girl
he screwed), Stephen Wolfram, Albert Einstein spreading anti-semitism
by their flagrant unethical behaviour.
<snip more nonsense/>

You are a lousy troll.


Rui Maciel
 
L

Lawrence D'Oliveiro

In message
did you really have to post all of this...



...oh sorry only about a third of it...

Still totally unnecessary, though.

In other words, software that was developed at Symbolics was not given
way for free to LMI. Is that so surprising?

Which is conceding Stallman’s point.

Anyway, that wasn’t Symbolics’s “planâ€; it was part of the MIT licensing
agreement, the very same one that LMI signed. LMI’s changes were all
proprietary to LMI, too.

I don’t understand this bit. The only “MIT licensing agreement†I’m aware
off _allows_ you to redistribute your copies without the source, but doesn’t
_require_ it.
 
D

David Kastrup

Emmy Noether said:
No one asks for a free ride. A free road is good enough.

Obviously you don't understand what you are talking about.
Perhaps we do the same to him and break into his FSF office and leave
a "friend" note we came to get the docs he has not released.

You can't "get" anything that has not been written.
The concise answer: We want a free road but not a free puzzle.

You have the freedom to walk the forest you perceive. You have the
freedom to build the road that you want, in that forest.

If it is a puzzle to you, that is your own problem. It is not a puzzle
because somebody would have cut a whole into pieces and scattered them
around. It is a puzzle because nobody put it together yet.

Feel free to do so, doing others the service you want done.
Now, dont run away from this argument and bring each and every of the
boys from his mailing list to tackle this question. He is a manager
and he can put the volunteers to the task of documenting, illuminating
and revealing the operation of his softwares and its evolution.

You want a free ride, very obviously.
He owes it to others

And you think your whining entitles you to it.

What did you ever do to _deserve_ others working for you?
 
N

Nick

Emmy Noether said:
In this video, Stall man makes 4 promises to public but stalls on 2nd
of them.

I have no idea of the rights or wrongs of this case. But I've found
through experience that when someone uses a "witty" misspelling of
someone's name, they are almost always the one in the wrong. 5 lines in
and here we are - so if your case has merit, think about whether you
want to do this.

BTW - Did you see what I did there? I snipped all the rest of the post
as it wasn't relevant. I know several people have asked you to do it,
but you seem to be having difficulty with the concept, so I thought I'd
give you a practical example.
 
E

Emmy Noether

Obviously you don't understand what you are talking about.


You can't "get" anything that has not been written.


You have the freedom to walk the forest you perceive.  You have the
freedom to build the road that you want, in that forest.

If it is a puzzle to you, that is your own problem.  It is not a puzzle
because somebody would have cut a whole into pieces and scattered them
around.  It is a puzzle because nobody put it together yet.

Feel free to do so, doing others the service you want done.


You want a free ride, very obviously.


And you think your whining entitles you to it.

By his own admission he broke into professor's offices to help others,
ie unlock the monitors. He has tried to project an image of a saint
for freedom. Its a DECEPTION. A scoundrel has a right to be scoundrel.
But if he projects himself as a saint, then people have a right to
clear the facts.
What did you ever do to _deserve_ others working for you?

What did we do to deserve him to write that elisp manual of 800+
pages ? NOTHING. He gave it to us in the hope that his software will
spread like a VIRUS. He had hopes for money from big companies
probably, which he must be making to pay the astronomical rent in tbe
boston/cambridge area. I can assure you that he can document all the
essentials of his program in a thin book of a few hundred pages with a
trivial amount of man-hours compared to being spent on things which
brings fewer volunteers.

It is said : A picture is worth a thousand words. Make some transition
diagrams, structures, and UML type diagrams of the operation of the
software.
What did you ever do to _deserve_ others working for you?

Draw a diagram, A state transition diagram to understand how illogical
you are.

A person arrives in the state of a newbie and wants to exit in a state
of having made a contribution to FSF. How can one do it without
adequate documentation ? Xah Lee has been complaining for a year.
First you deprive people of ESSENTIAL documentation to contribute.
Stall man has written user manuals to effect viral spread. But he has
not written operational details to get the same viral contribution by
others. He must not want it. Yet you want to use it as a taunt as in
pot calling the kettle black ???!!!

OK, why dont you explain a few basic things, if it not a
puzzle ????!!!!

DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
"Eval args until one of them yields non-NIL, then return that value.
\n\
The remaining args are not evalled at all.\n\
If all args return NIL, return NIL.")
(args)
Lisp_Object args;
{
register Lisp_Object val;
Lisp_Object args_left;
struct gcpro gcpro1;

if (NULL(args))
return Qnil;

args_left = args;
GCPRO1 (args_left);

do
{
val = Feval (Fcar (args_left));
if (!NULL (val))
break;
args_left = Fcdr (args_left);
}
while (!NULL(args_left));

UNGCPRO;
return val;
}

I saw that on comp.lang.c and found no one capable of explaining it.

And where does the manual explain the C struct or ADT of the basic
cons cell ? which file has the definition ? where is his eval_quote
function definition ?

Basically, Richard Mathew Stall man is a STALLER of PROGRESS. He
expected the XEMACS people to EXPLAIN HIM EVERY SINGLE line of code.
What did he do to expect all this ? He was even paid money , as
claimed by the XEMACS people.

What did he do to deserve and EXPECT a line by line explanation from
them ?????!!!!!! ANSWER this question and dont run away !!!!!!

He is prone to forgetting like all mortals and if he is prolific to
write that 900 page manual, I am sure he has hidden notes that he has
not released. Where was he recording the line by line explanation he
was receiving from the XEMACS people ? If not in his own very personal
version ???

Answer these very strong arguments ??? What did he deserve to get the
XEMACS people's explanations ? AND why is he INCAPABLE of building
upon the XEMACS work ??? This is all about documentation, professional
jealousies of these mean spirited people with double standards. Send
him a CC of this thread. I expect him to explain some of these issues
of documentation.
 
E

Emmy Noether

I have no idea of the rights or wrongs of this case.  But I've found
through experience that when someone uses a "witty" misspelling of
someone's name, they are almost always the one in the wrong.  

Huh, you forgot that the whole of GNU = Gnu Not Unix

You have double standard and you know very well whats right and whats
wrong.
 
J

Julian Bradfield

DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
"Eval args until one of them yields non-NIL, then return that value.
\n\
The remaining args are not evalled at all.\n\
If all args return NIL, return NIL.")
(args)
Lisp_Object args;
{
register Lisp_Object val;
Lisp_Object args_left;
struct gcpro gcpro1;

if (NULL(args))
return Qnil;

args_left = args;
GCPRO1 (args_left);

do
{
val = Feval (Fcar (args_left));
if (!NULL (val))
break;
args_left = Fcdr (args_left);
}
while (!NULL(args_left));

UNGCPRO;
return val;
}

I saw that on comp.lang.c and found no one capable of explaining it.

What do you need explained? Other than what's already in the manual
(Gnu Emacs Internals section of the Elisp manual.)
And where does the manual explain the C struct or ADT of the basic
cons cell ? which file has the definition ? where is his eval_quote
function definition ?

Try lisp.h
RMS doesn't really believe in ADTs - that's one of the main complaints
from XEmacs.
As for finding functions, I believe Emacs has commands to help with
that, but personally I just go grep eval_quote *.c
 
N

Nick

Emmy Noether said:
Huh, you forgot that the whole of GNU = Gnu Not Unix

You have double standard and you know very well whats right and whats
wrong.

Ah. I see. You know my thoughts better than I do.

That means you're another nutter.

What I wrote was entirely true - I haven't read these great long posts
in any detail. I've just deleted your email unread and plonked you.
 
D

David Kastrup

Emmy Noether said:
What did we do to deserve him to write that elisp manual of 800+
pages ? NOTHING.

So once one gives you something, you demand everything?
He gave it to us in the hope that his software will spread like a
VIRUS.

Yup. It is called "culture". It is _supposed_ to spread exponentially.
That's what the peculiar brain structure of humans is good for.
Communicating knowledge instead of inheriting it. That's the
fundamental advantage we have over other animals. Not something lightly
given up.
A person arrives in the state of a newbie and wants to exit in a state
of having made a contribution to FSF.

That's the problem of the person. It has not been a goal of the GNU
project to turn every person into somebody useful. They have the
freedom to try, getting everything for their start that anybody else has
available.
How can one do it without adequate documentation ?

Emacs development is active, so there are people considering the
documentation adequate for starting to work on Emacs.
Xah Lee has been complaining for a year. First you deprive people of
ESSENTIAL documentation to contribute.

You can't "deprive" anybody of anything that is not there to start with.
DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
"Eval args until one of them yields non-NIL, then return that value.
\n\
The remaining args are not evalled at all.\n\
If all args return NIL, return NIL.")
(args)
Lisp_Object args;
{
register Lisp_Object val;
Lisp_Object args_left;
struct gcpro gcpro1;

if (NULL(args))
return Qnil;

args_left = args;
GCPRO1 (args_left);

do
{
val = Feval (Fcar (args_left));
if (!NULL (val))
break;
args_left = Fcdr (args_left);
}
while (!NULL(args_left));

UNGCPRO;
return val;
}

I saw that on comp.lang.c and found no one capable of explaining it.

If you see other context-free stuff on comp.lang.c, the situation will
not be different. The above code is rather trivial. But you'll find
the respective parts explained in the Emacs Lisp manual. In fact, the
above is likely extracted from exactly there, from

(info "(elisp) Writing Emacs Primitives")

I append the whole at the bottom to not interrupt the flow of
non-thought.
And where does the manual explain the C struct or ADT of the basic
cons cell ? which file has the definition ? where is his eval_quote
function definition ?

eval_quote? What's that?
Basically, Richard Mathew Stall man is a STALLER of PROGRESS. He
expected the XEMACS people to EXPLAIN HIM EVERY SINGLE line of code.
What did he do to expect all this ?

He was the maintainer of upstream Emacs, and it was his decision what
code was going there. And he had to keep maintainability in mind.
Something which was less of a priority with XEmacs developers, and
likely part of the reason that they are running out of fresh blood much
worse than Emacs these days.
He was even paid money , as claimed by the XEMACS people.

What did he do to deserve and EXPECT a line by line explanation from
them ?????!!!!!! ANSWER this question and dont run away !!!!!!

There was nothing to "deserve". It was his job to keep Emacs going
forward, and his opinion and decision that throwing the Lucid Emacs code
in would not have been good in the long run. It has not been good for
XEmacs in the long run. Whether it would have been better or worse for
a grand unified Emacs, noone will ever know. He decided to play it safe
given the information he had at that time, and Emacs is still there and
going forward.

In spite of trolls like you spouting abuse by the hundreds.

More than can be said for many other projects.


File: elisp, Node: Writing Emacs Primitives, Next: Object Internals, Prev: Memory Usage, Up: GNU Emacs Internals

E.5 Writing Emacs Primitives
============================

Lisp primitives are Lisp functions implemented in C. The details of
interfacing the C function so that Lisp can call it are handled by a few
C macros. The only way to really understand how to write new C code is
to read the source, but we can explain some things here.

An example of a special form is the definition of `or', from
`eval.c'. (An ordinary function would have the same general
appearance.)

DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
doc: /* Eval args until one of them yields non-nil, then return that
value. The remaining args are not evalled at all.
If all args return nil, return nil.
usage: (or CONDITIONS ...) */)
(Lisp_Object args)
{
register Lisp_Object val = Qnil;
struct gcpro gcpro1;

GCPRO1 (args);

while (CONSP (args))
{
val = Feval (XCAR (args));
if (!NILP (val))
break;
args = XCDR (args);
}

UNGCPRO;
return val;
}

Let's start with a precise explanation of the arguments to the
`DEFUN' macro. Here is a template for them:

DEFUN (LNAME, FNAME, SNAME, MIN, MAX, INTERACTIVE, DOC)

LNAME
This is the name of the Lisp symbol to define as the function
name; in the example above, it is `or'.

FNAME
This is the C function name for this function. This is the name
that is used in C code for calling the function. The name is, by
convention, `F' prepended to the Lisp name, with all dashes (`-')
in the Lisp name changed to underscores. Thus, to call this
function from C code, call `For'. Remember that the arguments must
be of type `Lisp_Object'; various macros and functions for creating
values of type `Lisp_Object' are declared in the file `lisp.h'.

SNAME
This is a C variable name to use for a structure that holds the
data for the subr object that represents the function in Lisp.
This structure conveys the Lisp symbol name to the initialization
routine that will create the symbol and store the subr object as
its definition. By convention, this name is always FNAME with `F'
replaced with `S'.

MIN
This is the minimum number of arguments that the function
requires. The function `or' allows a minimum of zero arguments.

MAX
This is the maximum number of arguments that the function accepts,
if there is a fixed maximum. Alternatively, it can be `UNEVALLED',
indicating a special form that receives unevaluated arguments, or
`MANY', indicating an unlimited number of evaluated arguments (the
equivalent of `&rest'). Both `UNEVALLED' and `MANY' are macros.
If MAX is a number, it may not be less than MIN and it may not be
greater than eight.

INTERACTIVE
This is an interactive specification, a string such as might be
used as the argument of `interactive' in a Lisp function. In the
case of `or', it is 0 (a null pointer), indicating that `or'
cannot be called interactively. A value of `""' indicates a
function that should receive no arguments when called
interactively. If the value begins with a `(', the string is
evaluated as a Lisp form.

DOC
This is the documentation string. It uses C comment syntax rather
than C string syntax because comment syntax requires nothing
special to include multiple lines. The `doc:' identifies the
comment that follows as the documentation string. The `/*' and
`*/' delimiters that begin and end the comment are not part of the
documentation string.

If the last line of the documentation string begins with the
keyword `usage:', the rest of the line is treated as the argument
list for documentation purposes. This way, you can use different
argument names in the documentation string from the ones used in
the C code. `usage:' is required if the function has an unlimited
number of arguments.

All the usual rules for documentation strings in Lisp code (*note
Documentation Tips::) apply to C code documentation strings too.

After the call to the `DEFUN' macro, you must write the argument
list that every C function must have, including the types for the
arguments. For a function with a fixed maximum number of arguments,
declare a C argument for each Lisp argument, and give them all type
`Lisp_Object'. When a Lisp function has no upper limit on the number
of arguments, its implementation in C actually receives exactly two
arguments: the first is the number of Lisp arguments, and the second is
the address of a block containing their values. They have types `int'
and `Lisp_Object *'.

Within the function `For' itself, note the use of the macros
`GCPRO1' and `UNGCPRO'. `GCPRO1' is used to "protect" a variable from
garbage collection--to inform the garbage collector that it must look
in that variable and regard its contents as an accessible object. GC
protection is necessary whenever you call `Feval' or anything that can
directly or indirectly call `Feval'. At such a time, any Lisp object
that this function may refer to again must be protected somehow.

It suffices to ensure that at least one pointer to each object is
GC-protected; that way, the object cannot be recycled, so all pointers
to it remain valid. Thus, a particular local variable can do without
protection if it is certain that the object it points to will be
preserved by some other pointer (such as another local variable which
has a `GCPRO')(1). Otherwise, the local variable needs a `GCPRO'.

The macro `GCPRO1' protects just one local variable. If you want to
protect two variables, use `GCPRO2' instead; repeating `GCPRO1' will
not work. Macros `GCPRO3', `GCPRO4', `GCPRO5', and `GCPRO6' also
exist. All these macros implicitly use local variables such as
`gcpro1'; you must declare these explicitly, with type `struct gcpro'.
Thus, if you use `GCPRO2', you must declare `gcpro1' and `gcpro2'.
Alas, we can't explain all the tricky details here.

`UNGCPRO' cancels the protection of the variables that are protected
in the current function. It is necessary to do this explicitly.

Built-in functions that take a variable number of arguments actually
accept two arguments at the C level: the number of Lisp arguments, and
a `Lisp_Object *' pointer to a C vector containing those Lisp
arguments. This C vector may be part of a Lisp vector, but it need not
be. The responsibility for using `GCPRO' to protect the Lisp arguments
from GC if necessary rests with the caller in this case, since the
caller allocated or found the storage for them.

You must not use C initializers for static or global variables unless
the variables are never written once Emacs is dumped. These variables
with initializers are allocated in an area of memory that becomes
read-only (on certain operating systems) as a result of dumping Emacs.
*Note Pure Storage::.

Do not use static variables within functions--place all static
variables at top level in the file. This is necessary because Emacs on
some operating systems defines the keyword `static' as a null macro.
(This definition is used because those systems put all variables
declared static in a place that becomes read-only after dumping, whether
they have initializers or not.)

Defining the C function is not enough to make a Lisp primitive
available; you must also create the Lisp symbol for the primitive and
store a suitable subr object in its function cell. The code looks like
this:

defsubr (&SUBR-STRUCTURE-NAME);

Here SUBR-STRUCTURE-NAME is the name you used as the third argument to
`DEFUN'.

If you add a new primitive to a file that already has Lisp primitives
defined in it, find the function (near the end of the file) named
`syms_of_SOMETHING', and add the call to `defsubr' there. If the file
doesn't have this function, or if you create a new file, add to it a
`syms_of_FILENAME' (e.g., `syms_of_myfile'). Then find the spot in
`emacs.c' where all of these functions are called, and add a call to
`syms_of_FILENAME' there.

The function `syms_of_FILENAME' is also the place to define any C
variables that are to be visible as Lisp variables. `DEFVAR_LISP'
makes a C variable of type `Lisp_Object' visible in Lisp. `DEFVAR_INT'
makes a C variable of type `int' visible in Lisp with a value that is
always an integer. `DEFVAR_BOOL' makes a C variable of type `int'
visible in Lisp with a value that is either `t' or `nil'. Note that
variables defined with `DEFVAR_BOOL' are automatically added to the list
`byte-boolean-vars' used by the byte compiler.

If you define a file-scope C variable of type `Lisp_Object', you
must protect it from garbage-collection by calling `staticpro' in
`syms_of_FILENAME', like this:

staticpro (&VARIABLE);

Here is another example function, with more complicated arguments.
This comes from the code in `window.c', and it demonstrates the use of
macros and functions to manipulate Lisp objects.

DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p,
Scoordinates_in_window_p, 2, 2,
"xSpecify coordinate pair: \nXExpression which evals to window: ",
"Return non-nil if COORDINATES is in WINDOW.\n\
COORDINATES is a cons of the form (X . Y), X and Y being distances\n\
...
If they are on the border between WINDOW and its right sibling,\n\
`vertical-line' is returned.")
(coordinates, window)
register Lisp_Object coordinates, window;
{
int x, y;

CHECK_LIVE_WINDOW (window, 0);
CHECK_CONS (coordinates, 1);
x = XINT (Fcar (coordinates));
y = XINT (Fcdr (coordinates));

switch (coordinates_in_window (XWINDOW (window), &x, &y))
{
case 0: /* NOT in window at all. */
return Qnil;

case 1: /* In text part of window. */
return Fcons (make_number (x), make_number (y));

case 2: /* In mode line of window. */
return Qmode_line;

case 3: /* On right border of window. */
return Qvertical_line;

default:
abort ();
}
}

Note that C code cannot call functions by name unless they are
defined in C. The way to call a function written in Lisp is to use
`Ffuncall', which embodies the Lisp function `funcall'. Since the Lisp
function `funcall' accepts an unlimited number of arguments, in C it
takes two: the number of Lisp-level arguments, and a one-dimensional
array containing their values. The first Lisp-level argument is the
Lisp function to call, and the rest are the arguments to pass to it.
Since `Ffuncall' can call the evaluator, you must protect pointers from
garbage collection around the call to `Ffuncall'.

The C functions `call0', `call1', `call2', and so on, provide handy
ways to call a Lisp function conveniently with a fixed number of
arguments. They work by calling `Ffuncall'.

`eval.c' is a very good file to look through for examples; `lisp.h'
contains the definitions for some important macros and functions.

If you define a function which is side-effect free, update the code
in `byte-opt.el' which binds `side-effect-free-fns' and
`side-effect-and-error-free-fns' so that the compiler optimizer knows
about it.

---------- Footnotes ----------

(1) Formerly, strings were a special exception; in older Emacs
versions, every local variable that might point to a string needed a
`GCPRO'.
He is prone to forgetting like all mortals and if he is prolific to
write that 900 page manual, I am sure he has hidden notes that he has
not released. Where was he recording the line by line explanation he
was receiving from the XEMACS people ? If not in his own very personal
version ???

What makes you think he received any such explanation? Why would not
the XEmacs people, after writing such explanations, put them in their
own code and manuals?

Your conspiracy theories just stink.
Answer these very strong arguments ???

Ok, so they stink strongly.
What did he deserve to get the XEMACS people's explanations ? AND why
is he INCAPABLE of building upon the XEMACS work ??? This is all about
documentation, professional jealousies of these mean spirited people
with double standards. Send him a CC of this thread. I expect him to
explain some of these issues of documentation.

I quoted the above part from the documentation. I do not consider this
sort of shit worth his attention and certainly won't forward it, lending
it credibility. It is not like he has a secret Email address or
something. I should hope he would have the prudence to just throw crap
like the above away should he receive it from some anonymous idiot not
willing to sign his name under his brain farts.
 
K

Kenneth Tilton

Lawrence said:
In message


Still totally unnecessary, though.


In other words, software that was developed at Symbolics was not given
way for free to LMI. Is that so surprising?

Which is conceding Stallman’s point.

Anyway, that wasn’t Symbolics’s “planâ€; it was part of the MIT licensing
agreement, the very same one that LMI signed. LMI’s changes were all
proprietary to LMI, too.

I don’t understand this bit. The only “MIT licensing agreement†I’m aware
off _allows_ you to redistribute your copies without the source, but doesn’t
_require_ it.

Right, and this "fascinating" and "amazing" and "awesome" post needs
only one rejoinder: twenty-four years later all we have is "free as in
beer" software being milked by proprietary enterprises.

Sadly, they would be more effective and more profitable if RMS had never
existed, because then they would be paying fair market price for
significantly better proprietary tools driven by the demands of a
price/value competitive market.

What we do not have is any interesting amount of "free as in speech"
software, because no one uses the GPL.

The LGPL is Stallman's way of saying, OK, I was wrong.

kt
 
P

Pascal J. Bourguignon

Kenneth Tilton said:
What we do not have is any interesting amount of "free as in speech"
software, because no one uses the GPL.

I do. So far, I resist to calls to put my software in a less
freedom-promoting license.


Hey everybody! Switch from MIT or BSD to GPL! Now!
 
R

Rui Maciel

Kenneth said:
What we do not have is any interesting amount of "free as in speech"
software, because no one uses the GPL.

You appear to be either confused or out of touch with reality. If that wasn't enough, your comment
becomes a bit more amusing once we check your post's user agent.


Rui Maciel
 

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,774
Messages
2,569,596
Members
45,141
Latest member
BlissKeto
Top