There will be a NetSurf developer weekend on 14, 15, 16 November 2014 in Manchester, hosted at the offices of Codethink.


  • jmb
  • Kinnison
  • kyllikki
  • rjek
  • tlsa


Some things that may be discussed or worked on include:

  • Review, fix and merge GSoC Hubbub work
  • Testing
    • Layout: bitmap export via framebuffer frontend, and comparison
    • Browser: scripting monkey front end
  • Current state of JS
    • Duktape? (Quack.)
  • URLdb rewrite
  • Current state of core browser API
  • New layout engine planning
  • Squashing old bugs
  • Filterable logging stuff
  • Performance
  • NetSurf to core buildsystem



  • Vince recently split out utf8proc and all present hurrahed.
  • Libharu appears to be abandonware -- Do we want to take it on, or do we want to drop it? Decision is to drop it for now, and worry about it again when we have paginating layout
  • Break out most of utils/* and shunt the rest around? -- Non-urgent but not vetoed (call it libnsutils)
    • Officially, John-Mark Bell acknowledges he's okay to re-license his code as MIT/Expat
    • Officially, Daniel Silverstone acknowledges he's okay to re-license his code as MIT/Expat
    • Officially, Rob Kendrick acknowledges he's okay to re-license his code as MIT/Expat
    • Officially, Michael Drake acknowledges he's okay to re-license his code as MIT/Expat
    • Officially, Vincent Sanders acknowledges he's okay to re-license his code as MIT/Expat
    • Missing permissions: Chris Young, Achal-Aggarwal, Adrian Lees, Adrien Destuegues, Andrew Duffell, Andrew Sidwell, Andrew Timmins, Anthony J. Bentley, Chris Williams, François Revol, James Bursa, James Shaw, Jeffrey Lee, John Tytgat, Kevin Bagust, Matthew Hambley, Mike Lester, Ole Loots, Philip Pemberton, Phil Mellor, Richard Wilson, Rob Jackson, Sean Fox, Steve Fryatt, Sven Weidauer
  • Toolchains
    • Atari is bugged
    • libcurl/openssl updates are often and annoying
    • We need to lorry all the things -- Daniel to assist
    • GCCSDK not compilable with modern ubuntu (14.04) currently (maybe update?) (Wheezy works)
  • Michael has a load of libcss stuff he hasn't pushed because he's a silly moo.
  • TODO: come back and think about hubbub


  1. URL (normalised fragmentless nsurl) -> key/value store (avec \$indices of various smells)
  2. Cookie jar
  3. Password bucket
  4. Autocompletion database
  5. hostname pattern -> key/value store

This should be part of libnsutils

Further design discussion at that time.



layout context hangs off a DOM document


  • Render API (potentially extended with compositing)
  • Font Metrics API
  • Scheduler
  • CSS handling
  • Event injection API?


  • Text layout algorithms
  • CSS3 features and impact vs. currently understood layout

Deep thought:

  • inlines


Vince is concerned about nsgenbind -- He feels the idl vs. bnd thing might be a pain. There are two branches, one in nsgenbind and one in NetSurf which need finishing. Basically restructuring the output. This is idle from 12 months ago and needs adopting.

A C mirror of the IDL object model has to be constructed in order that we can then bind to an engine.

Duktape (finally released in October 2014) lacks a lazy evaluation model. This means that we'd have to build 400 prototypes up front on every engine initialisation. Expensive in time and memory (can we perhaps handle this with duktape threads?)

Spidermonkey JSVERSION is not Spidermonkey's API version -- oopsie

Our Spidermonkey API version is, unfortunately orphaned (1.7 is pre-NSPR and we use this everywhere but Linux) 1.8 and 1.85 are post-NSPR and are the last separable library releases of spidermonkey (and here is the orphaning). Between 1.7 and 1.8[5] we have significant API/ABI differences. We currently "patch" this with a header file full of macros. 1.85 actually refers to the javascript version not spidermonkey. We're not seeing API stability and we cannot build against more modern Spidermonkey

We'd like to split out spidermonkey version and make the macros use those. Unfortunately pkg-config is a tad pants here due to missing version information.

Perhaps we need someone (not Vince to save his brain) to research duktape's status, capabilities and write a mini report for Vince.

Ultimate goal would be something like libnsjavascript which builds on top of duktape, contains the bindings, and abstracts all of that out of the netsurf repository, so that netsurf simply ends up gluing browser_window, libnsjavascript, the dom it got content and fandango together.


  1. Core buildsystem -> triplets

    • Move the warning flags into the core
    • If a platform lacks a triplet, inventorizificate one.
  2. Port NetSurf to the core build system

    • May need extensions to core build
      • May be feature discovery stuff
    • Ensure that testrunner can run any of the random mini-test-suites we have in NetSurf currently

So core-buildsystem gains kinda thing

Migration of NetSurf to core build system may be predicated on moving platform content from frontends into libnsutils

Core Window Thing

Coalescence of all core vs. frontend window abstractions:

  1. Browser Window
  2. Treeviews
  3. Local history


  1. Everything is a browser window (abuse Content model)
  2. Have a 'Window' superclass, move most interaction to that abstraction, browser_window is effectively a subclass