Skip to content

Defunct or Removed features from FontForge

Jeremy Tan edited this page Apr 19, 2019 · 4 revisions

This page documents features or ideas that were integrated, but have since (or are being) been removed.

Direct HTTP/FTP browsing support

The background on this is described by George here.

Nominally, it allowed FontForge to interact with files directly over http/ftp.

Reasons for removal

  • It's a large attack surface to be exposing FontForge to, and FontForge already has enough of those
  • HTTPS is becoming the norm, making this implementation obsolete
  • It's buggy - attempting to open a URL leads to a segfault
  • Let's not re-implement a HTTP/FTP client in FontForge. Use a library that specialises in that where necessary.

Removal

This feature was removed in this pull request: https://github.com/fontforge/fontforge/pull/3181

This was released with the 20190413 release.

Future potential

Little to none

Plugins support

As with the HTTP support, the reason why this was introduced is documented by George here.

It would have allowed third-party extensions to integrate into FontForge.

Reasons for removal

  • It ultimately went unused - the only plugin created was written by GWW, being the gb12345 encoding plugin. The feature that provided is easily replaced by loading a custom encoding, which FontForge already supports.
  • It created a dependency on libltdl, which in turn, creates a dependency on the autotools build system. Not impossible to solve, but not worth the effort, considering it went unused.
  • FontForge doesn't really expose a stable API/ABI, making it difficult to write plugins against

Removal

This feature was removed by this pull request: https://github.com/fontforge/fontforge/pull/3635

This was released with the 20190413 release.

Future potential

  • It's nice to be able to extend FontForge - but this is in part, already possible via Python scripting

Boehm GC

This was introduced with this pull request. The idea was to add a garbage collector, making it possible to handball off memory management to it.

Reasons for removal

  • Nice in theory, but it didn't work out (1, 2, 3, 4).
    • Memory usage increased significantly in some cases
    • Caused weird crashes when the GC ran
  • It wasn't 'free' - you ended up NULL'ing variables in the hope that the GC would free it
  • It created a stronger dependency on Gnulib (see below)

Removal

The bulk of the garbage collector changes were reverted with this pull request, with some later follow-ups.

Future potential

It's nice not to have to worry about freeing memory. But that code has already been written, and it (more or less) works.

Gnulib

Gnulib is an in-source 'portability' library, that aims to make it possible to just use POSIX/stdlib functions and have it work everywhere.

As best I can tell, it was introduced with this commit (no PR!), with multiple PRs after that to move things over to use it.

Reasons for removal

  • Using Gnulib strongly ties FontForge to the autotools build chain. Reasons for why this is bad have been summarised in this issue.
  • Gnulib slows the build - on Windows, quite significantly; on other platforms to a lesser degree
  • There's nothing in FontForge that creates a strong dependency on Gnulib - for whatever compatibility fixes it provides, there's either pre-existing solutions in Glib, or it's not difficult to roll our own fix.

Removal

Gnulib is in the process of being removed with this pull request.

Future potential

It does provide some nice portability benefits. But there are equally other ways and means of achieving this.

Collab

Collab refers to a set of tools and integrations that would have allowed real-time interaction on editing a font in FontForge. To do this, it hooked into the undo/redo system, and used ZeroMQ to broadcast these out to interested parties.

It was first introduced with this pull request, although there were subsequent pull requests to build on it.

Reasons for removal

  • The collab code has been unmaintained for a number of years, and remains buggy when used
  • It has a dependency on an old, unmaintained version of ZeroMQ/CZMQ
  • It has never been compiled to work on Windows
  • As with the HTTP/FTP code, the networking code is a security risk
  • The implementation 'leaked' a lot into many parts of FontForge; although some is inevitable, it would have been nicer if there was a clearer separation
  • No one uses it

Removal

This is in the process of being removed with this pull request.

Future potential

This is a feature that could actually be useful if it was maintained and looked after. The hooks into the undo/redo system in particular are of worthy note.

GTK Hooks into GXDraw

There were a set of changes and Python scripts that made to make it possible to hook into GDraw (the X11 version/GXDraw).

Reasons for removal

  • It's unlikely that anyone will be using it at this point
  • GDraw (like all FontForge DLLs) doesn't really provide a stable ABI
  • How it's been implemented is fragile
  • We're in the process of moving away from GXDraw

Removal

The issue to remove this is covered here and the pull request is here.

Future potential

Being able to extend the GUI is a nice idea. How this is done will need to change, as we shift towards using GDK/GTK.

GTK2 Reimplementation

This was a partial, unfinished re-implementation of FontForge to work under GTK2, written by George.

Reasons for removal

  • It's unmaintained and unfinished
  • When bulk changes are done, they often touch the gtkui folder, with no guarantee that it hasn't broken something (else) in it. It also results in wasted effort whenever someone ends up touching it because of that.
  • If this were to be done, there's no point targeting GTK2 any more

Removal

This has been removed with this pull request.

Future potential

There are many reasons why we should move off GDraw, and use a standard UI toolkit. If/when that happens, this may serve to be of some benefit, but there's no reason to keep it around just for that (and it's easy enough to pull out of git history).

"Graphicore" python shell window (pycontrib)

This added an interactive python shell activated from the tools menu. This is a potentially useful addition, but:

Reasons for removal

  • It relies on a fragile gxdraw interface not applicable to GGDKDraw
  • The version of ipython_view.py is very old, and the updated Accercizer version of this file is still somewhat out of date with IPython
  • Its implementation is based on the old pygtk GTK 2 interface, rather than the current PyGObject interfaces.

Removal

Is has been removed with this pull request.

Future potential

It would be nice to support this via an updated ipython_view.py and different interfaces. However, it will either need to be added as a "core" function or based off some other graphics extension convention. The most likely means for the latter is some kind of GTK-based convention, used with GGDKDraw or some successor to that.