Why METAFONT didn’t catch on?

TUG2008, Cork, Ireland

Dave Crossland dave@lab6.com

Introduction: Dave is an international public speaker on software freedom and fonts, he runs a small business doing type design, information design and free software consultancy projects, and is a committee member of UKTUG. He’ is currently studying the Masters programme in typeface Design at the University of Reading, and he’s doing a presentation today on “Why Didn’t METAFONT Catch On?”

Dave: Alright, thank you.

METAFONT.

I’m assuming a general understanding of what METAFONT is. It was made by Don Knuth as part of the original TeX system a long time ago - 1978 - its one of the earliest digital type design systems, and as we’ve been in the last few hours its capable of dealing with pretty much any system you can throw at it. Its always been freely available, and its remarkably powerful. But its never caught on with professional type designers. I wonder, why that might be?

There’s an old joke that there are three kinds of people, those that can count, and those that can’t. There’s a serious point to that though - that of type. Not as in typography, but as in psychology, personality type. There is a brand of personality type psychology, “Myers-Briggs” that’s pretty famous and perhaps you’ll have heard of before.

That looks at people in terms of how the use tools - if they prefer to use tools in a cooperative way or a competitive way. And a similar aspect of that trait is our approach to decision making, whether we make decisions more logically or emotionally. Other ways people are different in their personality are to do with their use of language, some people prefer to use more abstract language and thinking, while other people prefer to use more concrete language.

Myers-Briggs has some peculiar words for this, Thinking, Feeling, Sensing, Intuiting, and that gives those preferences little one letter labels.

It also takes into account other things, attitudes to socialising, if you feel after a dinner party drained or energised. And also attitudes to time keeping, if you prefer to be more flexible or punctual. Again, there are these jargon words for these preferences, Introverted Extroverted, Perceiving, Judging. And you put these together into a system, which gives 16 personality types.

There’s a book called “Please Understand Me 2” where some psychologists put this together in a cohesive system, and grouped those 16 personality types together in to 4 temperaments. To make those a bit more understandable, they used Greek Gods to personify those temperaments. So they had a class of Dionysian “Guardians”, another set of Apollonian “Artisans,” and Epimethian “Idealists,” and TeXXies, er, Promethean “Rationalists.”

This is a broad theory for how people are different, and perhaps you can’t take it too far, as ultimately people are all pretty much the same - what one man can do, another man can do - but there is definitely a sense that there is a certain set of the population who tend to be more abstract in their language and thinking and more logical.

Software is pretty logical and abstract, and the people who get into software related things tend to be of these personality types, and free software - the free software movement, specifically - has that kind of draw. And TeX programs also tend to have that kind of approach, as does METAFONT.

But type design is probably not very abstract and logical. Its to do with shapes, spaces between shapes. Its visual, or concrete, and its more emotional than logical.

The kind of people who tend to do type design are not the kind of people with backgrounds in software engineering.

So, I want to go into type design from less of a software engineering perspective. Design happens at various scales at the same time, and type design is no different. At the lowest level, the letter, you are dealing with the black shapes of the letter, its obvious what that is, and then there’s a kind of optical trick where you shift your focus to the white shapes in and around the letter. You can imagine a letter being inverted so the black is white and the white is black, to bring this shape out in to focus.

At another level, you have words. In words there is not only the white shapes inside a letter, or around a letter, but the shapes between the letters. Another things at the word scale is managing the black shapes across letters, the things that look similar (although are not exactly the same.)

You can see here a lowercase n and h. These are similar shapes, but if you look between them, you can see there are slight differences. Between all the letters, there are regular aspects, and some of the earlier presentations today talked about archetype shapes used to construct letter forms out of. Managing letters that are similar is a core aspect of type design. There are strong similarities between various kinds of letters. The letter s is perhaps the most different, and Don Knuth wrote an interesting essay about that.

Going up another level, to paragraphs, where you have paragraphs set and you have a different impression of the letters, you get emergent visual effects, and you have to take that into account when designing the other levels. For example, a ligature, you are dealing with the spaces in and around the letters in a precise way, and this effects the way that a paragraph of will look at a subtle level.

That is what typeface are. So what is a font? What is the difference? Its a subtle distinction: A font is a typeface implemented in software. You can have the same typeface implemented in a metal typesetting technology, and in software, and in… potato? Whatever one you print with, the letters will look the same.

Software is programs and data. Fonts are a peculiar kind of software, because they include programs and data in the same thing, whereas there is normally a big separation between them. Examples of font programs are TrueType hints and OpenType features, and font data is the glyph point data and metrics table data - which is pretty much what the typeface design is.

How are typefaces implemented in software? There are really just two approaches that have come out of the last 30 years.

One is the outline or “Fontographer” approach, where each letter is drawn - visually, interactively - and this is a direct translation or facsimile of the analogue shapes of the letters. Its really good for implementing existing type designs. The AMS Euler project is a clear example of this, where they had an existing design to be digitised, and the best way to do that was to trace the outlines. FontForge is a really great font editor that is free software for doing that.

The other approach is the “METAFONT” approach where you have this stroke and pen idea, and the previous session covered how that goes, where each letter is constructed, by writing source code in an algebraic programming language. That’s an unusual kind of programming language, and its not visual, and its not very interactive. Its abstract and logical. Its not a direct translation of what you do on paper, its “digitally native” - the whole thing is created digitally. This is not great at implementing existing type designs, but I think it could be great for developing new type designs - where its not sure what it is, the look you are trying to get.

MetaType1 is based on MetaPost, a modernisation of METAFONT. As we heard yesterday, the developers are continuing to do good work on that. Its also a very abstract and logical approach.

TeXWorks takes a different approach to TeX typesetting; instead of being very abstract and logically minded, its a little more visual and interactive, because the cycle between writing the TeX code and previewing it is quicker. The SyncTeX technology really helps with that. It makes TeX a little more concrete, a little more emotional.

I wonder if METAFONT style type design technology could also be more concrete and emotional. We’re going to need some kind of canvas that looks nice - Cairo - and splines that have smooth curvature, and Raph Levien has developed a spline format, Spiro, that guarantees very smooth curves, and I encourage everyone to look at that. Its integrated with Inkscape recently, and I hope that it will be featured in the next version. FontForge has recently been restructured so that its a regular kind of C library - “libfontforge.” And we’ll need an object model for fonts, and the RoboFab project has really done some great work thinking out the object model of what a font it. I’d also like to see this done with a framework that allows real time collaboration, so several people could sit with their computers and work on the same glyph or font at the same time, as if you were sat around a big bit of paper, scribbling, and there’s a framework from BBC R&D, Kamaelia, that is powerful and seems useful for this. And I’d also like to see distributed version control there too, if it was fast enough that you could record every step in the design process. Like git.

I think font development is very much a piece of software engineering, and I think type design could benefit from aspects of the software engineering approach, even though the ways people do type design tend not to have those aspects - software engineering is much more logical and abstract, and doesn’t seem to be obviously related to type design. But I think there is at least something in there.

I tried to make this quick, so, questions?

15:15

Q: The designer is meant to write stuff? You need a font designer, I think. They are artists. They cannot write this only with programs…

A: Right. I think what I’m trying to say is that the METAFONT approach, if it was visualised much faster, could work for them. At the moment, you write the MetaPost or METAFONT sources, and you run a program to compile or generate images. That whole process, its not real time. Whereas say in TeXWorks, in real time you write the TeX document source, and generate the PDF instantly, and there is a very quick cycle between writing the code and seeing the result. I think bringing that approach to MetaPost style graphics would help people who are more artistic to take a more engineering approach.

Q: Since you are a software writer and a type designer, when are you going to release this?

A: LOL Okay, I’m actually not a software developer. I studied fine art, then graphic design, and now typeface design at the University of Reading. But I am also working part time, and am looking to hire someone to write this software. A friend of mine in Portugal, who was presenting similar work he did in Holland, at the Libre Graphics Meeting, a free software conference for Graphic Design that was in Poland recently, so I’m hoping to hire and work with him on producing this software. This is very much a vapour-ware kind of presentation, but, no, I’m serious about doing this. If anyone wants to help, then send me email!

Q: Visualisations of METAFONT have existed for many many years.

A: :-)

Q: METAFONT is good because of its META-ness. I did my Minion Math fonts with MetaType1 and there are 20 or 30 possible variations possible. How do you propose to visualise these variations? I have one font program in MetaType1 and 20 variations to be shown on the screen.

A: Sure. In your preamble you have your variables that you use to calibrate the following METATYPE program that generates one of those 20. But that is sometime into the process, and I’m talking about the beginning of the process where you are designing new shapes, where you don’t know quite what shape it is you are looking for, and you want to tweak those variables and see what different things look like. Doing that in the outline approach is quite laborious, and using the METAFONT approach of the stroke-pen gives you access to other forms quicker, and that’s a better approach. The sophisticated abilities in METAFONT for dealing with large families of type is great, but I’m talking here about type design, the designing of shapes.

Notes from the Kamaelia talk at BBC Mashed

These are rough notes from a public event, and any errors or stupidity should be attributed to me and my poor note taking; I hope these notes are useful despite their obvious flaws, and everything should be double checked :)

Kamaelia is an awesome framework and doesn’t get anywhere near enough recognition, and I have enormous respect for the project lead Michael Sparks although we disagree on a couple of things :-)

Kamaelia at Mashed, 2008-06-21 12:20

[20 mins late :( ]

http://edit.kamaelia.org/GetMashed

/Examples/Introspection

This is a pyGame window that visualises the program! You can see the program is made is discrete individual chunks.

/Examples/VideoCodecs/SimpleDiracPlayer.py

This has a simple pipeline, like a UNIX pipe, which links together these boxes - like hardware and mashups. Whats inside a box?

It has a ConsoleReader() that takes input and pushes it to an outbox. The original concept is network servers, and things are non-blocking there, so they are here too. Note that python “yeild” is not the same as Ruby’s.

So how do you write a component?

/Examples/Sketches/

This is a Webcam exmaple: It uses pyGame for display, and starts with getting a display, getting a camera, taking images, and finally displays them. its simple and fun :)

But not massively reusable. Its just a mirroring thing, right? So then we make it a threaded component; you can see the changes from a standard python object class to a ThreadedComponent one in this file, and we separate out flipping the display; thats a global thing that we want to reuse. (You can only have one display in pyGame because its a limitation of SDL.)

To turn this component into something you can re-use, you need to have it spit the output out, instead of keeping it internally. This makes the code a lot simpler, so you just have something that captures the image and puts it into an outbox.

Now that it is a component, you can use the inbox of any other component to process that outbox; a diplayer, a video encoder - anything. So you make a displayer component, that is simplified too, although maybe won’t play nice with other concurrent components, so could be improved.

“Here’s one I made earlier.” A metaphor for components is someone in an office who needs to know something: they go and ask someone. This code goes and finds who is displaying things, and uses their outbox. This is a complex example, since it looks for other components in the system globally, and then asks them to do something.

Axon is like the Linux kernel, its the very low level stuff, and then Kamaelia is the bulk of the components itself, like GNU, that completes the system and makes it easy to do things.

/Examples/TCP_systems/SimpleStreaming

This is a TCP server instead of a GUI display. The CookBook on the wiki has great examples; the SimpleBittorrentExample page was written by non-BBC people, and its great. You can use all the components in the same system if you want.

/Examples/SimpleGraphicalApps/BouncingCat

This is a silly exmaple, with just 2 components. What happens if you bolt a webserver onto it? Well its easy, you can have a webpage to upload images and add them to the bouncing caracel - that becomes straightforward to do with Kamaelia.

So that is how you build systems and wire them together.

Kamaelia Macro

This records and transcodes what is broadcast over DTT, for future viewing. Timeshifting is perfectly legal, you just can’t redistribute the data legally. So you can build you own home ‘redux’ system easily using the Macro example. It also has a method for ‘Finding Programme Junctions’ and transcoding to any format, using a ‘pipe through’ to mencoder. If anyone can build a redux this weekend, that would be awesome; you could make it controlled via IRC easily with our IRC component, loads of fun stuff.

Kamaelia Grey

This is an email greylisting server, and this is what Michael uses personally at home, and it works very well. Greylisting works with 3 pieces of information: who they send it to, who they claim to be, and what IP they are using. If any one of them hasn’t been seen before, it asks for a SMTP resend, and most spam doesn’t resend, and if it gets a resend, it accepts it. This has eradicated Michael’s spam!

The core is GreyListServer, with a TCPserver inbox which is a Selector. Someone connects, Selector tells the TCPServer, and that opens a new GreyListServer instance. It you have a large number of connections at once, the Selector handles that with ease. The 3 main components of the greylisting core are GreylistServer, ConnectedSocketAdapter and GreyListingPolicy. These 3 things create a factory for handle new connections.

New Release

There is a new release of Kamaelia today, anyone can contribute to the Ideas page on the wiki, please do. Someone making a homebased redux system for recording everything is possible: 1Tb harddisks are now only £70 and you only need a cheap laptop worth of processing power…

Q: Repository format?

A: We use SVN. We allow people to make branches with their names, and have a ‘Sketches’ tree. The 3DFolding one is in the MH/OpenGL dir. There is a handwriting recognition component which works pretty well (StrokeRecognition.py) and a speech generation component too! And you can join these together as they are just components. GP2X with the stylus input, you could make a ‘speak and spell’ easily enough: It could say “Spell the word Cat” and then recognise the hand writing. [Someone actually made this at Mashed!]

Q: License?

A: Mozilla trilicense: MPL1.1, LGPL2.1, GPL2. Boils down to, change our stuff, share it, write your stuff, don’t have to share. Mozilla was chosen because of an explicit patent grant, in case the BBC went to patent some of these stuff. And it protects recipients of the code too.

Q: Whats the relation between redux, pandora, macro?

A: Pandora was made by some brothers; they were commissioned to make Macro for the BBC. Tom Loosemore then wanted to replace the backend; he heard Radio had a system for transcoding everything from radio for podcasts. So that needed a lot more efficiency for video. Redux was a different thing at the same time, that doesn’t transcode. But this was great for us so we could focus on the opimisation of things, such as zero copy transfer between components. So now implementing redux takes a day!

12:50 end

GNU Hackers Meeting 2008 Notes

These are rough notes from a public event, and any errors or stupidity should be attributed to me and my poor note taking; I didn’t get much sleep last night since my talk at the event was at 09:30 this morning, and I was just traveling in France to research my thesis and had to catch up on email and stuff, so the notes are less thorough than I’d’ve liked. But videos of the talks are available at http://www.river-valley.tv and some photos at http://www.espontaneas.com/album/h/buscar/gnuhm2008 so not to worry too much about that, you can watch them yourselves :-)

It was a great meeting with a lot of smart and interesting free software hackers, and I’m sad I missed the first day because I was in France.

Distributed Version Control

Ian Jackson

10:20

Distributed VC makes it easy to deal with things when people disagree with you. We are all sometimes wrong and it helps when the discussion about who is right and wrong isn’t interfered with.

Git is very popular; rcs, svr, &c, tla, are all basically dead in 5 years. CVS/SVN are still going, and the DVCS that aren’t git are not all that popular.

Git: Very different to the others; most people here have used it, it is very popular.

Bzr: Bazaar is a marketing term, a totally different system to bzr. Baz was a fork of TLA (formerly Arch) and Bzr is a totally new VCS with all new code. Its similar to Mercurial Darcs and Monotone.

rsync is a strange kind of version control - and you will need to 2nd

Q: Git is fine; moved from CVS to Git

A: A lot of people who tried that got stuck, git was linus’ ideas and it doesn’t resemble CVS. Eg, you are using git and want to commit, “git commit -a” and “git diff” before you do that check-in, but that might not show everything. If you edit a file and you want to throw them away and replace with the repo version, you use “git checkout”. That’s okay if you want to learn the quirks, but if you want to sell someone a version control system, they don’t want to learn.

Fortunately, all the rest do have a user interface that is roughly the same. But all 4 have some killer disadvantage.

bzr is very slow on huge projects; its great for a tiny little project of your own and your friends. bzr won’t blow up if you type strange commands at it.

hg is slowish, and the way it handles tags strangely.

not used the others enough.

Q: darcs v1 documentation had ‘exponential corner cases’ but v2 was fixed them. great UI though.

Q: Monotone also quite slow

So they are all playing some kind of catchup game.

So these Big 5 are all in a good usable state, more or less (big projects need git…)

We like getting our patches upstream, and upstream have an important gatekeeper role, but DVCS can mitigate the bottleneck problems there…

You have more downstream effort in most projects, Linux kernel has most effort up, and its strange requirements have an effect on Git.

Bzr has a bunch of propaganda about merging instead of emailing patches like git; that works well with DVCS. You can maintain two main trees and constantly merge from one to the other.

You can use bzr for a small project, and in 5 years time, there will be a wrapper for Git so you can easily switch up if you become big enough. If you are a big project, you should pick git.

A chief selling point of Git is that if you disagree with someone using another VCS tool, you can mirror their repo into your git.

Distributed means branches are cheap; non-distributed VCS don’t track what has been merged, and its very tedious to make a new branch. When branching is really easy, you make them all the time - make a branch, mess some stuff up, an urgent bug fix comes in, switch to the main branch and fix it, switch back to the messy branch, carry on. With CVS you can get very big merges and its a real pain. You do it once a month, because its such a big job. But with DVCS you do it daily.

No need for in-tree change logs with DVCS, an in-tree list would be a feature list.

Ian wants to write a wrapper called VCS that means they all have the same interface.

All the Big 5 are stable enough for real work, although they are in active development.

……

All use commits that are hash based, and hash collision with tags is unlikely.

gitk is a GTK git repo viewer.

Freedink

Sylvian B

12:00

Game programming system under the GPL

FreeDink is a game, the old isometric style of Zelda. You start off as a pig farmer, and you learn how to fight, and increase your skill points.

DFArc2 is a game manager, and there are many games made by users. There is a map editor.

History: There was the Dink project in 03/04, was portable but buggy, and then Dink v1.08 2006-now that’s windows (woe) only and has backwards compatibility problems. GNU FreeDink forked from original Dink, was X11 like but now GPL. The first port was not well documented, the new project has a good task list and docs: Compiler, 2D graphics (stretching, full screen), Fonts, Sound (sample rate conversion for slowing/speeding up sounds)

Progressive migration; continuous testing so nothing was broken for too long. MinGW allowed a switch from MS VC++6 to GCC. SDL is a simple DirectMedia Layer, portable but not equivalent to DirectX, so needed to reproduce

Fonts, was hard to get things pixel-same, using FreeType to draw direct on screen and using the Liberation fonts for their metrics compatibility.

For portability, MinGW can be used as a cross compiler to create .exe from GNU/Linux. This meant there was no need for cross platform tool chains, and autotools, git and wxGlade were fine with cross compiling but they are available but trickier on Woe normally.

xdg-utils was used to make the DMOD files, which are really .tar.bz2 files, recognised as DMODs instead of by file-roller.

Q: I just compiled freedink, but it came with no DMODs?

A: In the docs directory, you can find data.txt, that explains.


GNU Epsilon

14:00

Luca Saiu positron@gnu.org

Learned ML, Lisp, Haskell; in 2001 did a toy implementation, in 2002/3 it became more ambitious and I reimplemented it all, making me a better functional programmer; and submitted it to GNU and it was accepted. In 2007 I moved to France, did the 4th implementation and 3rd garbage collection.

I spoke to many people here and everyone seems to know Lisp ;)

Why don’t more people do functional programming? It looks and is different; its reputedly inefficient although not always true.

The language should be layered; a core language that is layered, untyped (so unsafe), and without continuations, lambdas, side-effects, the only conditional being case, and user definable primitives.

The middle language is translated into the core language; its a middle layer of abstraction still not user-facing. Its more lisp like with first class procedures and continuations, side effects, and programs are written as s-expressions.

Top language default will reflect my own tastes but the developer can override all my preferences or do something totally new.

Q: Alan Kay’s “Reinvention of Programming” has a layered language similar to this; he wants a complete graphic OS in 10,000 lines of code. Is epsilon useful for system programming?

A: Lisp and OCAML are useful for system programming. … I want to get the design just right before I recommend it for that kind of use though.

PsychoSynth

14:40

Juan Pedro Bolivar Puente

A winning project in a Spanish students’ free software projects competition.

Its an audio synthesiser. Its an electronic device to make sounds, specifically sounds for music. The concept is modular, interactive, collaborative.

Modular: Breaking sounds into modules that are used to build a soundscape.

Interactive: It has dynamic patching, where modules are connected automatically depending on their relative position and kind of signal. Multi-tactile interfaces give more control over more kinds of input at once.

Collaborative: But there are still too many parameters to be controlled by one person. This can be a single physical interface for several people, or a network to connect several small interfaces.

The reaction to multi-tactile interfaces is “reactable is so cool, I want one” but the free software approach is to Do It Yourself. But the table, camera and projector are expensive; the prototypes are written in Pure Data which is fine for that but not extensible or scalable.

Implementation: We have generators, they generate source sounds, like basic waves (sinus, square, triangle, sawtooth, etc) and noise (white, pink) and samples (where you can change the pitch, run backwards, time stretch, etc)

PsychoSynth3D screenshot

30,000 lines of C++, 7,000 change a month, GPLv3 throughout, the Reactable staff are interested in the project and rewriting in C++ also.

We have got mac/windows music making guys think about free software. There are really good free software audio programs but they have the UNIX philosophy where configurations are used to pipe things together - but this has a more integrated approach, so now people who wanted to buy the Reactable now install psychosynth.

Future: A lot of feedback in a short time.

A lot of people want a port to proprietary platforms, but this is not a priority for me. But its free software! :)

Q: Can you save the scene graph state or even record the whole thing like a Quake demo?

A: Its a planned feature to add soon

Q: How does the network stuff work?

A: We only transmit the events with Open Sound Control low latency protocol, the samples have to be on the clients beforehand.

Q: Have you tried with people not in the same room?

A: The current implementation wont work well over the net, but on a LAN it works great

Its Not The Gates, Its The Bars

Richard Stallman got published by BBC News, writing about Bill Gates’ final retirement from Microsoft. Sadly the BBC continues to require proprietary software to access its services.

Clutter Storming Ahead

Pippin scares me; a recent blog post shows how Clutter is storming ahead - and a screencast shows it off nicely :-) (ogg download)

Inkforge Gathers Steam

Inkscape’s capacity as a SVG Font Editor - and moreover, a typeface design tool - is gathering steam :-)

I didn’t propose adding any special font support to Inkscape, just adding a few things to the UI to enable people to draw typefaces, which is a different task to developing production font software - and for that, fontforge is great, and its spartan UI doesn’t matter so much for that work.

But the Inkscape developers are talking about much more sophisticated stuff, which is exciting:

Currently SVGFonts rendering in a helper GtkWindow is working ok for glyphs described using the path descrition (“path:d”) attribute. Once we move the rendering to the canvas, arbitrary chunks of SVG will be added to the glyphs. Currently glyph kerning and missing-glyph nodes are also properly handled and rendered.

I am using the helper GtkWindow because we still don’t have pango+userfonts integration. So I am using cairo+userfonts directly on the GtkWindow. Once pango supports userfonts, I will remove the GtkWindows and render SVGFonts on the correct place (directly in the canvas). Since my work now depends a lot on this pango support, it has been evolving very slowly. I am thinking of doing some user interface work while we are stuck with pango.

So, this thread is intended to discuss ideas and mockups on what people want to see for the SVGFonts user interface.

Mental told me yesterday that it should be possible to edit glyphs on canvas directly on the rendered text in an “edit fonts” mode. I agree that this is the ideal thing to do, i.e. have things rendered in real time as much as possible. For example, when the text “Felipe” is rendered using an SVGFont and the user goes to “font edit mode”, then editing the content of one of the “e” glyphs would make both “e” glyphs to be visually modified as if they were clones. That is the desired “real time” on-canvas bahaviour.

But I also think that there should be an off-canvas glyph-editing user interface. There must be a dialog where the user can define the glyph-names, metadata such as font-family name and all the other font descriptors, the missing-glyph curves, and all of the glyph-kerning rules. Also, in this off-canvas UI, we could/should have helper lines indicating font metrics information such as base-line, top-line, etc. just like a font-editor would be.

I also have in mind a unicode codepoint selector widget to be used for the u1 and u2 attributes in the kerning rules dialog.

Please, feel free to offer new ideas or to say my ideas are crap or whatever. I am open to discussion. JucaBlues

FontForge Icons

George Williams posted on the FontForge mailing list today:

the cvs tree contains little icons in the menus. I’m not the greatest icon designer. If anyone would like to redo them so they are nicer that would be great. There is one unexpected caveat: FontForge doesn’t handle alpha channels, so all icons should be indexed images with a transparent color. (This corresponds to an alpha channel which is either all on or all off inside gimp).

I hope the toolkit FontForge uses will be improved further one day - anti aliased fonts would be my Number One feature :-) - but this feature has been dormant for a while, apparently.

I’ve suggested using the Tango icons, and Alex P suggested the Art Libre Set, although the license status is in flux I think this is a great idea.

George, diplomatic as always, already coded up a solution for this too:

There is a preference item Generic->PixmapDir which allows you to select a directory in which to find icon files, so ff could come with several different styles of icons and users could pick the one they liked. Personally I think that’s a better approach than fixing on just one style (though I agree, the default style should be consistent, and isn’t currently).

Awesome :-)

Pat Tillman

Hadn’t heard about Pat Tillman before; I wonder if there have been any UK equivalents that haven’t gone awry (from an iwar perspective). (Via FTW 2008 update)

Gatto on “Open Source Education”

I’m annoyed to see Gatto’s new book fall victim to “open source” propaganda, but look forward to its release :-)

Impeach Buch 2.0

Kucinich is trying again to impeach Bush, and his “Articles of Impeachment” is heavy reading: Fraud -

A Halliburton manager was indicted for ‘major fraud against the United States’ for allegedly billing more than $5.5 billion for work that should have cost only $685,000 in exchange for a $1 million kickback from a Kuwaiti subcontractor.
In a statement on Feb. 7, 2002, President Bush declared that in the US fight against Al Qaeda, “none of the provisions of Geneva apply” … On August 27, 2005, the Army demoted Ms. Greenhouse, removing her from the elite Senior Executive Service and transferring her to a lesser job in the corps’ civil works division . As Frank Rich of The New York Times described the situation, ‘[H]er crime was not obstructing justice but pursuing it by vehemently questioning irregularities in the awarding of some $7 billion worth of no-bid contracts in Iraq to the Halliburton subsidiary Kellogg Brown Root.’ The demotion was in apparent retaliation for her speaking out against the abuses, even though she previously had stellar reviews and over 20 years of experience in military procurement.”
In May 2008, the US government reported to the United Nations that it has been holding upwards of 2,500 children under the age of 18 as “enemy combatants” at detention centers in Iraq, Afghanistan and at Guantanamo Bay (where there was a special center, Camp Iguana, established just for holding children). The length of these detentions has frequently exceeded a year, and in some cases has stretched to five years. Some of these detainees have reached adulthood in detention and are now not being reported as child detainees because they are no longer children.

Doesn’t get much more “evil empire” than that.

Clipperz advocating an Affero Web

Glad to see other people working to make Affero GPL webapps a reality.

inSPIROd

More Spiro love from Andy:

inspirod

(SVG source here)

spiro 2

Just the node alignment stuff in Inkscape is awesome - already advanced past AI and FontLab’s node alignment tools - which Andy says is thanks to Mike Wybrow’s adaptagram code.

It seems the point of inflection for Inkscape’s feature set is becoming very soon now, but I hope the documentation for all the new features will be better. Symfony http://www.symfony-project.org/doc/1_0/ is a really nice model of how to documentation from a technical writing perspective; the “Askeet” 24x1hour tutorials, the screencast lessons, are great. Ubuntu’s screencasts http://screencasts.ubuntu.com/ shows what can be done today on the freedesktop with screencasting.

And I remembered Bulia (I think) talking about “inkcore” at LGM2007:

Typesetting a CV with LaTeX

Dario Taraborelli has an excellent LaTeX page that showcases the advanced typography that TeX is capable of (although he is very Mac OS X-centric and promotes proprietary fonts, sadly) and even has a page about typesetting a CV which I used to make my latest CV.

Inkscape Becomes an SVG Font Editor?

I hope I can inspire people to patch Inkscape to make it suitable for drawing type :-)

SVG Fonts isn’t supported much anywhere, but Chris Lilley’s talk at LGM2008 has got me thinking :-)

Could Inkscape become an SVG Font Editor?

Designing type involves working at four scales:

  1. designing individual letters (“drawing letters”)
  2. designing letters that look like they belong together (“drawing type”)
  3. designing letters that fit together to form words (“designing metrics”)
  4. designing letters that fit together to form paragraphs (“looking at typeset text”)

I think Inkscape could be good at all four of these.

Inkscape already has a template “fontforge_glyph” that sets up a canvas suitable for drawing a single letter - (A)

One way of making (B) possible could be through layers. SVG has “svg fonts” already, and this could work by having each glyph appear to be a layer. It would be possible to write a simple program to output an XML tree with the glyphs you want to design, and have a bunch of SVG Font templates for various common scripts. For this to really be useful though, Inkscape needs to have a new kind of layer-specific guideline. Inkscape doesn’t appear to have this right now, but since it has global ones, this ought to be simple to add. (If it isn’t again the SVG spec, it can be in the Inkscape-specific namespace.) Then, if the layers palette and “duplicate window” features could be extended to make it easy to compare layers (and thus glyphs) - stacking them, seeing them side by side, and so on.

The FontForge tutorial explains a little about designing metrics - (C). Having the left and right bearings appear as the page size (width) would be simple - and then Inkscape would be extended to allow changing the page size’s width directly on the canvas, instead of via the document properties dialog, so just like moving a guideline. But perhaps having layers with different page sizes is against the SVG spec… Although that would be the most straightforward way of setting the sidebearings from a UI perspective, if that isn’t possible, having the metrics appear as layer-specific guides with “left bearing” and “right bearing” IDs or Class could do the same job easily enough.

But what is really needed is to create a special “metrics” dialog. This could re-use the “duplicate window” feature to grab the glyph’s outline and render it on another canvas, a special one where the left and right bearings can be adjusted in the context of several letters next to each other in a word. (Again, see the FontForge tutorial if you’re not familiar with font editor programs.)

For typesetting text with the font, it would be straightforward to write some (python) glue scripts that open the SVG Font within FontForge, compile it into a system font format (Type 1, OpenType CFF) and then generate a PDF ‘specimen’ sheet to be printed. But eventually Inkscape will have to be able to render SVG Fonts directly on the canvas, and then it will be simple to have a “paragraph view” layer with some text that uses the glyphs from the self SVG.

Spiro Is Now Directly In Inkscape!

Spiro has now been directly integrated into Inkscape!

Sadly the easiest way to see this in action is via the Windows pre-release version (You’ll need 7zip to open that zip file :-)

By “direct integration” I mean that using the normal drawing tools, both freehand and bez-pen, there is a “spiro” mode that converts the points to spiro points.

My friend Andy has posted some drawings he’s made that show off the smooth curves Spiro creates:

Andys spiro showcase 1

Andys spiro showcase 2

Since most graphic designers use Crap OS X, they’ll have to wait until the next official release of Inkscape, later in the summer :-)

I added a section about compiling Inkscape on Fedora 9 to the Inkscape wiki.

Looking forward to TUG2008

The TUG2008 Programme is now online and I appear to be at the top. Here’s my abstract PDF and of particular note are Jonathan Fine’s LaTeX3 talk, Dan Rhatigan’s talk about mathematical fonts, and Jonathan Kew’s TeXWorks talk - UKTUG funded Jonathan to develop this program :-) - and also a talk about Cuneform type design with FontForge :-)

Here’s the text of my abtract:

“There are three kinds of people: Those that can count, and those that can’t.”

Metafont is an algebraic programming language for describing the shapes of letters, designed and implemented by Knuth as part of the original TeX typesetting system. It was one of the earliest digital type design systems, and is completely capable of dealing with the letters of any writing system, has always been freely available, and is remarkably powerful. Yet it never caught on with type designers.

The idea of software freedom has not caught on with many type designers either. Although the free software movement has produced a massive amount of high quality programs, there are few fonts and fewer original type designs - although there are some, with many of those available on CTAN.

Psychologists since Jung have suggested that human personality can be classified into ‘types.’ In “Please Understand Me II” David Keirsey relates 20th century theories of personality to the four humours proposed by Hippocrates and personified by the Greek gods Dionysus, Apollo, Prometheus, and Epimethius.

Do type designers tend to be of a certain humour? Is the inherently abstract Metafont approach of describing shapes with algebra, or the rational appeal of software freedom, unintuitive for that temperament? Are people who do find free software and algebra intuitive involved in type design?

This presentation introduces the discipline of type design, reviews some of the fonts currently distributed in CTAN and explains their various origins. It draws attention to how they have been developed: The stroke - based Metafont approach, involving writing source code, is starkly different to the typical outline - based ‘Fontographer’ approach, where letter shapes are visually and interactively designed. It suggests the technical benefits and drawbacks of each approach, and why some people prefer one approach over another.

Finally, it covers some tips and tricks for those contributing more free software fonts to the TeX world, including some of the legal issues, where and how to source revivals, how to create new designs, and finally, how Metafont might be modernised in a hybrid stroke/outline system to suit every personality.

Dave Crossland is an international public speaker on software freedom and fonts, runs a small business doing type design, information design and free software consultancy projects, and is a member of the UKTUG Committee. He is currently undertaking the MA Typeface Design programme at the University of Reading’s Department of Typography.

Ban on Flying With Gun Memorabilia

A British guy got turfed off a plane for wearing… a Transformers T Shirt?

Go through security, get pulled to the side. I’m wearing a French Connection Transformers t-shirt. Bloke starts joking with me is that Megatron. Then he explains that since Megatron is holding a gun, I’m not allowed to fly. WTF? It’s a 40 foot tall cartoon robot with a gun as an arm. There is no way this shirt is offensive in any way, and what I’m going to use the shirt to pretend I have a gun?

An American woman got turfed off a plane for wearing… a necklace?

“How do you know it wasn’t a real gun?” asked Guy, a security agent with the Canadian Air Transport Security Authority, who also declined to provide his last name. “Who knows if there is a gun that small that can shoot bullets? You don’t know that. They followed the rules.”

Richard comments,

The arguments offered to defend them show the insane frame of mind of the security state: grasp at straws to justify whatever they do, rather than admit being mistaken. That insanity is much more dangerous than any non-state-sponsored terrorists.

I’ll have to hit up eBay for gun memorabilia :-)

(Via a random visit to boingboing - avoid BB because its addictive - and Richard’s blog :-)

Apple’s DRM Makes Small Children Cry

Ben Griffiths posted on the Open Rights Group list this little story about why DRM is evil:

“I want to share a DRM story.

I was in Curry’s in Plymouth a couple of weeks ago. A man was arguing loudly with one of the staff, his ten-year old daughter in tears at his side. From what I could gather, she had saved up her pocket money to buy an iTunes gift card - the songs she’d spent her money on, of course, didn’t work on her mp3 player. The man wanted a refund for what seemed to him a defective product; the staff member said that if the card had been used they couldn’t give a refund. The young girl cried and cried and cried.

The altercation went on for at least 15 minutes - the store manager eventually having to call some security chaps to remove him, but not before phoning the police.

So, whose fault was this? Currys for selling a card without making it clear that some songs downloaded from iTunes wouldn’t work on some (!) mp3 players? The girl for not understanding the complicated world of DRM? iTunes for selling DRM music? The record company for not selling DRM-free music? The government for not requiring labelling of DRM-crippled products?

Who knows - I’m pretty sure the only person clearly free of blame was the little girl.

But, perhaps that’s the wrong question - the end result was a stand-up shouting match, someone manhandled out of a store, a staff-member threatened and frightened, and a little girl in tears having spent her pocket money on something that didn’t work.

I thought it was worth sharing this since sometimes we can get bound up thinking about piracy and digital distribution and so on, but these small stories are often missed.”

Why SoundFonts Ought To Be Free Like Wikipedia

The “functional works” issue has come up on the BLAG list regarding “soundfonts.” Here’s a fuller version of my post there:

Its important to start this discussion by framing it properly: this is about social policy, not technical detail. Most people are not used to thinking about issues of social policy, since we are trained for “problem solving” instead - myself included, for sure.

An example of this “problem solving” mentality often surfaces in this discussion, where things focus on formats or if things are digitised. But considering just text, be it printed on paper or digital ‘plain text’ or more in complex digital formats, there are three kinds of texts with regard to their roles in society and appropriate social policies.

First, words of aesthetics: A compilation of stories need not be modifiable.

Second, words of testimony: A compilation of political manifestos need not be modifiable.

Third, words of explanation: A compilation of how-tos needs to be modifiable, because it will have “bugs” - it will have things missing, or incorrect, and need updating. If the users of this “functional information” have to ask permission to make these changes, or are in other ways forbidden from making them, they are facing a tyrant. Guess where that leads :-)

Words of testimony or aesthetics are read, but not used.

Novels are entertaining, and if the audience feels things are missing, or incorrect, or need updating, it is not a problem if they have to wait a while before rewriting parts; we have a richer culture if we allow artists to control their works for a time, and then allow other artists to remix works after that.

Manifestos are persuading, but if the audience feels things are missing, or incorrect, or need updating, it is a problem if they rewrite parts - because that will misrepresent and misattribute the original authors; we have a richer culture if we write our own opinions from scratch.

Explanations are informing, and if the audience feels things are missing, or incorrect, or need updating, it is a problem if they can’t do that because it holds up progress; we have a richer culture if we “stand on the shoulders of giants.”

What are SoundFonts?

SoundFonts are collections of very short recordings of sounds that are arranged into musical compositions; you can play a composition using a well-keyed soundfont and it sounds harmonious, then play it again with a off-keyed soundfont and it sounds cacophonous. People need to change the sounds in a soundfont in order to render compositions correctly; akin to the piano tuner who works on physical pianos.

Fonts are digital versions of type designs; the same type design can be in metal, wood, or bitstreams. They are collections of very small shapes that are recognised as letters and are intended to be arranged into arbitary words; you can display a text using a well-spaced type design and it reads easily, then display it again with a poorly spaced type design and it reads poorly. People need to change the type designs they use because they can improve or inhibit reading in different contexts; font software adds an additional motivation for having free type designs, since fonts can have bugs that need fixing like other kinds of software (separate from the issue of the type’s design.)

The license for a soundfont that is part of BLAG permits converting to other formats, which is also an issue for font software. But this is separate to the issue of changing the sounds themselves, like changing the type design versus converting the format of the curves from cubic Type 1 beziers to quadratic TrueType beziers.

I think the SoundFont ought to be removed from BLAG, just like non-modifiable fonts ought to be removed.

Layering FontForge’s Metrics Window

Barry Schwartz suggested on the fontforge-devel list that “it would be useful to me to be able to put a bitmap image in a background layer of the metrics window.” George Williams asked, “Can you explain why this is worth the work? Why do you want an image there, that window isn’t intended for glyph design.”

Here are my thoughts:

The metrics window is used for metrics design; if you are doing a type revival from a scanned page and you want to get as close as possible to the original metrics, this would be useful because you could take small cropped sections of that image and drop it in as a background image in the metrics window and then line up the outline glyph’s metrics appropriately.

I think a more automated approach is certainly possible, where another program would segment the page’s letters into pairs or triplets or quadlets or … and have them classified by Optical Charachter Recognition (and by hand); then a complementary FontForge script to process the images and classification list to instantiate a series of metrics windows with each pair image and the corresponding glyphs.

(Raph wrote a program for segmenting scanned sheets into single glyphs, from which I get this idea)

Barry explains his current method:

Instead of Raph’s approach, I automatically cut the text into lines (rather than glyphs), do some ad hoc GIMPy stuff that gives me some idea of the impression, the spread, etc., and load an entire line into the glyph window. (I don’t do any averaging; I tried it and rejected the approach, at least for what I am currently doing.) I wanted to be able to load the lines into the metrics window as well, but it turns out to be more practical, for me, to work as follows: if I am working on right side bearing of “r”, let’s say, and I already have the left side bearing of “n”, I can put the image of the word “turn” behind the “r”, copy an “n” into the “r” window, put it over the “n” in “turn”, and then measure the distance between the letters. The glyph window is much better than the metrics window for this.

Thinking about things, it seems that reverse-engineering metrics from printed matter is made complex by kerning exceptions.

Libre Graphics Meeting 4 Ahoy!

Andy Fitzsimon is cooking up a great LGM4 website - but damn, Singapore is a long way away…

How Funding Free Software Can Fail

Jim Gettys made a great post today on the SugarLabs mailing list about the problems with funding community projects:

I’ve seen projects *die* from having centrally funded development staff conflated with project management and governance. This was the X consortium model (though it made other mistakes too). The scars are on my back, and I’m personally partially responsible for that mistake. And also as a result of that mistake, I’ve had a hobby of observing (and participating in) governance of large free software projects over the last 8-10 years (e.g. Gnome, X.org).

Several things can happen when governance and development are conflated: companies/organizations think to themselves: “I paid good money to the consortium”, and tell them to do it rather than staffing up to get things done themselves. Net result: no community, and endless arguments over what work the central staff should do; often over pet projects the funding organization can’t afford anyway, looking at that pot of money as a way to get what they think they want.

  • companies/organizations think to themselves: “Other people are paid to do it, I won’t help”, (either by people or money).
  • it becomes against the economic interest of the funding companies/organizations for the software to continue to evolve. So they oppose change.
  • the funding organizations, having put good money in to fund people, now believe they have good reason to “vote” and control what happens. This fundamentally dis-empowers the community. And then, you get to start over building community and an organization from scratch. While successful forks are possible, boy, are they hard (again, first hand experience).
  • “us” v.s. “them”. We see lots of that right now with OLPC; as our efforts have had to shift toward issues arising out of deployment, it has had the effect of dividing the community who develop the code and those who have to deal with the day-in-day out support issues. Lots of frustration on both sides. But more pernicious is control vested in a single organization of funded people; their ideas become much more likely to “ship” than other contributors, dis empowering both individual volunteers and organizations. Great people drift off into other projects, and you die slowly. Did you know Guido Van Rossem was once an X hacker?

In general, I’m much more comfortable with resources in the organization responsible for Sugar going toward community building. If you look at Gnome, or new X.org, most of the (relatively nominal) money they get from sponsors toward meetings and conferences, toward enabling travel of volunteers to those meetings, hardware for central facilities such as servers. They also act as dispute resolution forums, (though in well run projects, those are pretty rare events). The bulk of the work is done on by people with direct stakes in their outcomes, whether commercial or volunteer, and all are peers.

Having said this: sometimes it has made sense for open source organizations to fund work no one wants to do (e.g. test suites, or hiring copy editors to improve documentation, or…), though Cairo has shown even (some or all) those can be done by well disciplined projects.

So I’m very happy if Walter can get money to help push Sugar forward: but I think it is a grave mistake if we have governance of Sugar in *either* Sugarlabs (*if* it becomes a development organization by hiring developers) or OLPC’s hands. Sugar as a free software project has to become its own thing as an independently governed entity. And this will solve many conflict of interest and trust issues inhibiting growth of the community, and allow us all to work together even if funding sources are from highly competitive sources. You put the two together (governance and major funding), and it spells t-r-o-u-b-l-e.

Thanks for the pointer to Mako’s article. I wasn’t aware of it. I just have scars to prove it :-(….

Here’s another failure mode:

  • organization has a revenue stream to work on a particular project; said organization then decides to go in a different direction (from where the money was intended to be spent). Problem… Example: Motif; TOG was supposed to take the Motif royalty stream and spend it on maintenance and enhancement of that project; instead, the money went, (as far we can tell) to fund other projects the organization thought more important..

Software projects should have a life of their own, independent of funding source.

Arrested For Reading “Illegal Documents”

The UK is now arresting people for downloading “illegal documents” - from a well known terrorist organisation, the US government. This is via Richard’s blog:

[The UK state is] announcing their intention to imprison people for what they read. These tyrants are the real threat. Britons, don’t let the tyrants distract you by pointing at other minor enemies, while they attack your freedom.

From the Guardian article:

Rizwaan Sabir, 22, was held for nearly a week under the Terrorism Act, accused of downloading the materials for illegal use. … “they read me a statement confirming it was an illegal document which shouldn’t be used for research purposes. To this day no one has ever clarified that point.” … A spokesman for Nottingham University said … it was “not legitimate research material” but later amended that view, saying: “If you’re an academic or a registered student then you have very good cause to access whatever material your scholarship requires. But there is an expectation that you will act sensibly within current UK law and wouldn’t send it on to any Tom, Dick or Harry.”

Well, good old Cryptome published the links to “the edited FBI-alleged Al Qaeda Training Manual from DoJ http://usdoj.gov/ag/manualpart1_1.pdf” and “The full FBI-Alleged Al Qaeda Training Manual From Cryptome http://cryptome.org/alq-terr-man.htm.”

Be sensible and don’t click those links if your name is Tom Dick or Harry, eh?

Why Should Fonts Be Like Wikipedia?

Peter Nermander recently commented on the Scribus mailing list: “I wish fonts would be licensed the same way for example photographs.”

I disagree strongly about this. Fonts are functional software, and photos are typically decorative artwork, so they are not similar and ought not be treated similarly. Fonts ought to be like Wikipedia, “free as in freedom.”

I believe that since fonts are software, and since type designs are functional - a type design you can’t read with is non-functional - then they ought to be free in the same way as program software is, and functional information like encyclopedias is too.

There are several common criticisms of my position.

First, there is the basis of Peter’s comment, that “glyphs are art” and so type designs and font software ought to be treated like works of art. Scribus developer Andreas rightfully pointed out that “photos take only seconds or minutes to produce, while fonts take months or years.” But complex programs, encyclopedias with 10,000 high quality “core” articles and national street maps also take years to produce, so this is not a good reason why Peter is mistaken.

This reasoning is at best a misunderstanding of design as art, and at worse a sneaky way for proprietary software developers to justify DRM.

The second argument is that, if type is functional, and its function is to read written language, why do we need more than one typeface? Andreas wrote, “If function is all that matters, noone would need more than Courier/Times/Helvetica surely? Those are quite readable.”

Including several type designs in the list is a diluted form of the argument compared to “more than one?” because it already indicates that a variety of type designs are needed.

A variety are needed because while the ability to read words is the primary function of a type design, that is not the only functional aspect.

The software freedom movement needs many more fonts than those three - just as many as existing as proprietary software - because there are many secondary aspects of type designs that have a massive effect on how well they function.

There are also many tertiary aspects, about how type designs are implemented in software, too.

For example: Helvetica is a great type design for signage and large scale use, but it not intended for reading paragraphs of text at 10pt, and if its font isn’t hinted well, it will work very poorly at small sizes. Other sans serif type designs are intended for reading long texts with, and can be well hinted to function on screen as well as on paper.

The third argument is about money. This often comes with many assumptions that need to be examined - must type design be done as a business? Is a business in free information impossible? Or at least to make profit? Or to get rich? - and Andreas’ suggestion is typical of this: “A font designer has the right to profit from his/her work, and as long as one needs money for living, the font designer should decide how to pay for the use of his/her work.”

Richard Stallman was dealing with this kind of thing literally before I was born, and so I’ll parody his manifesto:

I could answer that nobody is forced to be a type designer. Most of us cannot manage to get any money for standing on the street and making faces. But we are not, as a result, condemned to spend our lives standing on the street making faces, and starving. We do something else.

But that is the wrong answer because it accepts an implicit assumption: that without total control of the use of font software, type designers cannot possibly be paid a cent. Supposedly it is all or nothing.

The real reason type designers will not starve making free software fonts is that it will still be possible for them to get paid for type design and font development.

Restricting copying is not the only basis for business in software. It is the most common basis because it brings in the most money. If it were prohibited, or rejected by the customer, business would move to other bases of organization which are now used less often. There are always numerous ways to organize any kind of business.

Probably type design will not be as lucrative on the new basis as it is now. But that is not an argument against the change. It is not considered an injustice that sales clerks make the salaries that they now do. If type designers made the same, that would not be an injustice either. (In practice they would still make considerably more than that.)

There are plenty of ways that type designers could make a living without selling various ways of using fonts. This way is customary now because it brings type designers and publishers the most money, not because it is the only way for them to make a living. It is easy to find other ways if you want to find them.

Here are a number of real world examples of free font software being paid for:

  1. A type designer finds 1 person who wants a font exclusively, and they pay 100% of the development cost (including a profit margin)
  2. A type designer finds 2 people who want a similar font unexclusively, and they pay 2/3rd of the cost each, leaving 1/3rd profit margin.
  3. A manufacturer introducing a new computer will pay for the porting of fonts onto the new hardware.
  4. An OS developer introducing a new OS will pay for the porting of fonts onto the new text layout engine.
  5. A lingusitics organization employs type designers to enable the organization to promote literacy in very poor areas of the world.
  6. The sale of teaching services also employs type designers.

I’m not sure that anyone has a right to profit, because if someone with a better business model starts their business, they ought to drive that person into bankruptcy.

There is nothing wrong about doing business and making profit and making a living, as long as that business isn’t socially harmful; many kinds of businesses are illegal, many more are socially frowned upon.

Proprietary software is socially harmful. I think I may have a better business model for making fonts than the proprietary guys; I’m certain I have a business model that can be profitable for me, and co-exist with them. Afterall, the only OS developers who have survived Microsoft, other than free software developers, are Apple.

Why Font Source And TrueType Binaries Are Never The Same

George Williams explains why a TrueType font cannot have a 1-1 relation to a SFD file:

FontForge is a font editor, it is designed to change things, not leave them the same. If you wish exact copying I suggest you use “cp” it will do the job nicely. Differences in the sfd files are caused by:
  1. FontForge has given you a GDEF table with glyph class info. It does this because these fonts contain different classes of glyphs, and in an opentype font that should be noted.
  2. One difference which is not visible in the sfd file is that FontForge has generated a ‘GPOS’ table rather than a ‘kern’ table in the ttf. If you don’t like that behavior you can have it generate a ‘kern’ table by turning off the OpenType Option when you generate the font.
  3. FontForge has reordered the glyphs. It does this because it always outputs glyphs in encoding order. If you wish glyphs to retain the original ordering simply change the encoding to “Glyph Order” (or “Original”) before generating the ttf.
  4. Each time it loads a new truetype font it generates a random PostScript XUID. This will be different because it must be different. XUIDs are completely irrelevant for truetype but are stored in the sfd file in case the user chooses to generate a PostScript font from this source at some time in the future. None of these changes has any effect on the semantics of the generated ttf. The same information is present in both fonts.
  5. The UnderlinePosition is different. This is indeed a bug in FontForge, which is now fixed. (It’s also well nigh irrelevant. Nobody cares about this field. It is stored differently in the ttf ‘post’ table than it is in a PostScript FontInfo dict (which is why ff gets it wrong)) The attached patch fixes this — it is also in the cvs tree.
  6. The “Instruction size” field of the ‘maxp’ table is different. I believe that the entry in the LiberationSans font as released on the RedHat site is incorrect — I believe the value FontForge has placed in its stead is correct. I believe this because the length of the ‘fpgm’ table of that font is 1797 and this is greater than the 1111 value stored in the ‘maxp’ table.

Next Page →