Live data from Hacker News

Hello (Distributed) World: Designing Software that Spreads P2P

blog.cyll.org

21–30 of 32 posts

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#22

So now we can't patch a security hole in a library without "recompiling" every application it's linked to? That seems like a huge step backwards to me.

A step backwards compared to what? Are you thinking about a specific alternative approach?

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#23

So now we can't patch a security hole in a library without "recompiling" every application it's linked to? That seems like a huge step backwards to me.

Remember, it's basically only Linux distros that have the capability to upgrade a third-party library like that (ironically, distro maintainers actually have the source code required to recompile everything if they wanted!).

Mac and Windows applications ship bundled versions of third party libraries all the time. Managing a complex web of name+version based dependencies is much harder in a decentralized software ecosystem, so bundling starts to look attractive.

For our purposes, the benefit of a system where software is more reliable, predictable, and accountable is greater than the cost of asking developers to recompile in unusual circumstances.

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#24

So now we can't patch a security hole in a library without "recompiling" every application it's linked to? That seems like a huge step backwards to me.

Security holes present an interesting challenge. Since we allow authors to blacklist their code at the uuid level, it's possible to issue a network-wide advisory that revokes execution rights for that specific uuid.

This can instantly close the hole until a patch is released. This keeps users safe and gives application authors time to test against their application with the new library before re-publishing.

In many cases, application authors are the only people that are qualified to test interactions between their applications and the updated library.

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#26
post #24

So now we can't patch a security hole in a library without "recompiling" every application it's linked to? That seems like a huge step backwards to me.

Security holes present an interesting challenge. Since we allow authors to blacklist their code at the uuid level, it's possible to issue a network-wide advisory that revokes execution rights for that specific uuid. This can instantly close the hole until a patch is released. This keeps users safe and gives application authors time to test against their application with the new library before re-publishing. In many c…

The distributed programmer in me wants to point out that having applications automatically use the latest version of a library is a scary proposition.

During a distributed operation, participants can arrive at many different points in time. This means that applications using the newly-patched library will likely be interacting with applications using the unpatched library. Whenever multiple versions of anything are interacting with themselves things can get complicated.

In light of this, we opted to keep things simple and predictable for ourselves (and others). Since applications always run against exactly what you say they should, you're free to keep running forward, without having to worry about tripping over past decisions.

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#27
post #6

Earlier quoted context omitted.

How about a chatroom?

Ignoring user interface and the mechanics of peer discovery... user-interface, discovery-system | # This process is spawned with two pids as arguments # If either pid halts, I halt too. user-interface.link discovery-system.link user-interface.subscribe(when( text-entered: { message | # I entered a message in the UI, announce it to everyone subscribed to me my-actor.announce('exclaimed, message) } )) discovery-system.…

what does ' before a symbol do?

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#28
post #27

Earlier quoted context omitted.

Ignoring user interface and the mechanics of peer discovery... user-interface, discovery-system | # This process is spawned with two pids as arguments # If either pid halts, I halt too. user-interface.link discovery-system.link user-interface.subscribe(when( text-entered: { message | # I entered a message in the UI, announce it to everyone subscribed to me my-actor.announce('exclaimed, message) } )) discovery-system.…

what does ' before a symbol do?

in scheme, the ' is the syntax for a quote. i'm guessing they use it here as syntax to symbols, but in some of the example code, i see it in front of list-like things too...

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#29
post #28
post #27

Earlier quoted context omitted.

what does ' before a symbol do?

in scheme, the ' is the syntax for a quote. i'm guessing they use it here as syntax to symbols , but in some of the example code, i see it in front of list-like things too...

Our use of ' was inspired by lisp's.

Immutability such is an important part of Spin's messaging model that we wanted a consistent way to declare an immutable construction.

  # An immutable string (or symbol)
  'foo

  # An immutable list
  '[ 1, 'foo, '[] ]

  # An immutable map
  '{ foo: 1, y: 'two, z: '[ 'three ] }

Slightly more advanced...

  # Also an immutable string
  "foo with spaces" 

  # An immutable pair
  "bar" -> 2

  # Syntactic sugar for that same pair
  bar: 2 

  # Syntactic sugar for "baz" -> baz
  ~baz

Re: Hello (Distributed) World: Designing Software that Spreads P2P

#30
post #29
post #28

Earlier quoted context omitted.

in scheme, the ' is the syntax for a quote. i'm guessing they use it here as syntax to symbols , but in some of the example code, i see it in front of list-like things too...

Our use of ' was inspired by lisp's. Immutability such is an important part of Spin's messaging model that we wanted a consistent way to declare an immutable construction. # An immutable string (or symbol) 'foo # An immutable list '[ 1, 'foo, '[] ] # An immutable map '{ foo: 1, y: 'two, z: '[ 'three ] } Slightly more advanced... # Also an immutable string "foo with spaces" # An immutable pair "bar" -> 2 # Syntactic s…

While we're talking about syntax, "\n" is an alternative to ",".

This helps multi-line expressions read more naturally.

  '{
    foo: 1
    baz: 'bar
    chunky: 'bacon
  }
Post reply on HN