#social 2019-08-15
2019-08-15 UTC
# curiouscat Bye
# melody i was....typing
# melody grumbles about IRC's lack of affordances
# dansup heh
# melody it probably wasn't a useful answer anyway
# dansup ActivityPub and NaCl could work, still need a way to share the decryption key though
# melody i don't think AP has useful semantics for real time chat, and that's not just a presentational issue, it doesn't have the primitives for presence, rooms, or keeping the integrity of message chains, you could torture it into working, or build a lot of extensions to try to support it, but it'd be a painful retrofitting process to do well
# melody in all seriousness, i was just going to say "whichever one the person you want to talk to is already using" there's no standout options here
# melody IRC isn't private, XMPP is dying & a lot of its clients don't have support for OTR, Tox has always had questionable cryptography and the dispute with their governing foundation has left things...messy, matrix only has one client with encryption support and it has unusable UX, Signal requires disclosing phone numbers, most other options are proprietary
# melody cryptocat used to be a relatively easy recommendation for quick/small things, but then it did that implosion act
# dansup oh yeah for real time chat there are better alternatives
# melody i wouldn't want to implement a service on any of the existing chat protocols
# dansup i was thinking more like Direct Messages
# melody i see "chat" and I assume real time, maybe that's a bad assumption
# dansup nah, I'd say that is what most people would assume nowadays with slack, discord and stuff
# melody i mean i've assumed it since that phrase would have been "AIM, MSN, ICQ, Yahoo Messenger and stuff"
# melody :P
# melody regardless, i don't think anything out there right now is really well-positioned to like, take over this space in a positive way, identity servers are something of an issue for matrix adoption, mattermost/rocket chat/zulip are too siloed, IRC doesn't meet modern needs and seems ill-positioned to ever do so, Chat-Over-IMAP is an interesting experiment but I don't think it's actually a good idea
# melody activitypub could be made to work, but it'd be unrecognizable from the version of activitypub that has been deployed anywhere and not interoperable
# melody XMPP is the best option, but it suffers from aging or dying clients, a (unfortunately well-earned) poor reputation, and too much necessary functionality split into extensions such that you can't rely on clients to support critical features in a modern messaging context, and designing for the most broken common denominator drags you back to the 90s
bralyclow, bralyclow01, bralyclo_, Guest84_, xmpp-social and vitalyster joined the channel; vitalyster left the channel
# jaywink[m] I guess the OP left but I'd recommend taking a look at the Matrix protocol (https://matrix.org). It's an open protocol governed by the Matrix Foundation featuring lots of modern features including end2end encryption and cross-device state. It's also decentralized in the way that rooms and messages are not at whims to the location they have been created at.
Guest84, TheLie, KjetilK_ and Guest84_ joined the channel
# melody i mentioned matrix several times, it's got a lot of problems
Po-chiangChao[m] and cwebber2 joined the channel
# jaywink[m] everything has problems :) you just need to find the one where the problems are not blockers in your particular case and the things that work well are the ones that are most beneficial for you
# jaywink[m] "unusable UX" is also a bit opinionated. UX that doesn't work for someone might be great for another
cwebber2 joined the channel
# melody the riot client is a hot mess and it'd be really hard to argue otherwise, it's cluttered, there are no UI hints, and nothing does what any reasonable person would expect having used any other software ever, especially around the groups functionality which by and large is just actually broken
cwebber2 joined the channel
# trwnh if you want presence then use xmpp, is basically the answer given in response to any protocol. stateful protocols have mostly all bitten the dust due to the rise of mobile, REST, and so on >melody: i don't think AP has useful semantics for real time chat, and that's not just a presentational issue, it doesn't have the primitives for presence, rooms, or keeping the integrity of message chains
# trwnh otherwise it's "good enough" to use ap. just use "context" for the room
# trwnh everyone posting to the same context should be posting in the same room
# trwnh or topic, or thread
# trwnh or whatever metaphor
# trwnh "context" is intentionally vague
# trwnh also re >XMPP is dying & a lot of its clients don't have support for OTR
# trwnh enough clients have otr that it's still a standard for journos
# trwnh omemo is the new hotness bc it gives you perfect forward secrecy across multiple devices
# melody OTR also requires active presence, it's not really suitable for partial-async services
# melody i don't see how you would use context for rooms
# melody unless you are talking about something other than the JSON-LD context, but that's absolutely not what the JSON-LD context is for
# melody and its not really vague, it's very defined in the JSON-LD standards
# trwnh i'm not talking about the json-ld @context, i'm talking about the activitystreams "context" property
# melody anyway you can't just use context for rooms -- the situation with follow semantics makes delivery if the room isn't an actor acting as some kind of relay a complete impossibility
# melody you'd need to torture AP beyond recognition to use it for real time chat
# trwnh idk what the deal is with "real time" here
# melody at least if you want people to see the messages
# trwnh given a fast enough async the difference is irrelevant
# trwnh even "real time" isn't real time
# melody AP's semantics are not designed for making fast-enough async plausible and it has no model for reconciling conflicts across the network -- there's no guarantee of eventual consistency, just best-effort eventual delivery
# melody it's just not an appropriate protocol for near-real-time chat
# melody the context property isn't enough to deal with group or room membership & message delivery to actors that don't follow each other, so you're already living deep in weird extension territory just to get any kind of multi-user messaging to work at all other than like, multi-user DMs, which can be handled with addressing but doesn't really solve the issue
# melody for microblogging the inconsistencies largely sorta work because not being able to see an arbitrary number of messages is sorta fine if people aren't actually having a conversation and are mostly just dropping disposable replies on each other or pushing notifications around, but it's the kind of unrealiability that makes any sort of actual chat dead in the water
# melody i really like AP, it's just really not designed for or workable as a chat system -- it'd be kinda rough even for less real-time stuff, but you'd need to mangle and extend it significantly to make chat work
cwebber2 and ilmu joined the channel
# trwnh i mean yeah it's more like email and mailing lists, but "eventual consistency" can be solved by simply having one server be authoritative for the conversation
# trwnh i.e. whichever server is storing the "context"
# trwnh so you send all your messages to the server, and the server relays the messages to all participants
# trwnh yes that's not as ideal as a purpose-built protocol like xmpp, but it's good enough
# melody it's not really, you still have the delivery problem, but i'm not gonna argue about this any further
# trwnh it's not really "weird extension" either, the only broken stuff is when existing impls assume too much
# trwnh all i'm saying is that posting to a "room" is not too different than posting to a "group". if people chat over *email*, i'm fairly sure they could chat over activitypub.
# trwnh it just can't be done in a "decentralized" way because the history and delivery has to be handled by one server
# melody people don't actually chat over email, and when they do they suffer from the same kinds of consistency problems -- and groups are also not in AP and would need significant extensions to be usefully added
# trwnh for best results, that is
# trwnh what do you mean "groups are not in AP"????? Group is supported in AP, are you conflating AP with the existing implementations?
# trwnh on a fundamental level if you can GET and POST, you can do anything
# melody groups are not in the AP protocol, there was a proposed extension for "groups" but it was really just a naive relay with no access control
# trwnh everything else is built on top of that
# trwnh uhhhh
# trwnh AP is built on AS2
# trwnh just make an actor that is a Group
# trwnh you can do literally whatever you want for the logic, you just need to handle messages POSTed to your inbox
# melody Yeah that's not enough actually, it would need to be part of the C2S and S2S specs for any interop to work for any actual functionality associated with groups
# melody you can say an actor is a group but you can't actually do anything with groups functionally
# trwnh why not?
# melody all of that would need to be handled by extensions
# trwnh the members of a Group are anyone that sends a valid Join https://www.w3.org/TR/activitystreams-vocabulary/#dfn-join
# trwnh you can mandate Accept/Reject for closed groups
# trwnh and then just redeliver any activities that it receives in the inbox to members
# trwnh none of this is extension territory
# trwnh it's just unimplemented
# melody The vocabulary isn't enough though, there's mountains of undefined behavior
# melody The vocabulary may make it possible to create the extensions, but not to actually usefully interop
# trwnh you could also publish received activities to a "wall" i.e. a webpage
# trwnh you could literally do whatever you want
# trwnh i'm just confused if by "interop" you mean "work across all implementations", because that will literally never happen in any open-world system. implementations will use what they understand
# trwnh and they can ignore anything they don't understand
# melody Yes, but you can always do literally whatever you want, the point of a protocol is to _NARROW_ "whatever you want" so that people can actually interop
# trwnh at the most basic level all you need for delviery is GET, POST, inbox, outbox
# trwnh i'm really struggling to think of a meaningful area where that isn't enough to be useful
# melody delivery isn't enough for meaningful group functionality, and the vocabulary doesn't specify enough behavior to make meaningful interop with groups possible, you need to tie the vocabulary together with definitions for the actions, some things may be relatively comparatively obvious, but you need the protocol or extension to define the behavior for the things that aren't, like sure maybe accept/rejecting is good for a join to a group object
# melody like what should happen if you follow instead of join a group and are those different
# trwnh Answer: whatever the server decides
# trwnh maybe it just throws away your Follow
# trwnh or maybe it sends you any public objects it determines should be posted to the "wall"
# melody yeah, that's not a protocol, that is why people write extensions, so that people can agree on things enough to work together
# trwnh it doesn't have to be the same for all software
# melody "you can do literally anything" isn't useful, of course you can, the protocol standards exist to make sure there are some things you should or should not or can or can not do, so that iterop is possible
# trwnh well this is a major source of disagreement because "you can do literally anything" is the entire appeal / reason of being for open-world systems in general
# trwnh if you start to over-define then you're making your protocol useful for more limited niches
# trwnh but useless to those outside the niche
# trwnh like really at its core as2 puts stuff in terms of actor-activity-object, and then ap lets you make other servers aware of stuff by describing how to GET and POST to inbox/outbox
# melody the entire point of a protocol is to remove possible options, it's an effort of curation and simplification, a narrowing down of possibilities so that people aren't using incompatible schemas and types and unable to interop, closed systems with APIs already do literally anything, and you can access their data, if you write specifically for it, but a protocol exists to coordinate and narrow down the field of possibilities enough to use a shared
# melody language
# trwnh i think it might be useful to reframe the question/assumption
# trwnh rather than "how is this done?" you should be asking "can software understand this?"
# melody and it can't unless it's defined, the vocabulary leaves a lot undefined, as does activitypub, that means that you can do a lot, it also means that most software will not understand each other without extensions defining things that were previously undefined
# trwnh can you give an example of something that is undefined that should be defined? and if so, how should it be defined, in a way that doesn't preclude other implementations?
# melody mastodon is exerting a lot of influence on undefined behavior as the furry elephant in the room acting as a reference implementation, software that doesn't implement mastodon's extensions can't interop
# trwnh can't interop *with mastodon*
# trwnh if we were to judge the protocol by what mastodon does, we would be greatly limiting ourselves
# melody right, but it'd be the same with literally anything else -- anything that wants to interop with anything needs to specify its undefined behavior one way or another
# trwnh the most interesting uses of activitypub, the most useful future implementations, i feel, will not be compatible with mastodon. full stop
# trwnh at least not 100%
# melody the definition of that undefined behavior is an extension
# trwnh mastodon makes too many assumptions
# trwnh it is a status-based microblogging server
# melody mastodon has added mostly-undocumented extensions to the activitypub protocol, if we had a formal extension process i suspect some of them would have been defined by now
# trwnh anything beyond "note with attachment" is too much for it to understand
# trwnh the only things mastodon has done, have their own contexts. e.g. using the toot: namespace
# trwnh which is basically just focal points for images
# trwnh and "featured" on profiles
# melody and its implementation of signatures and its semantics for handling the different addressing combinations
# melody and federated block activities
# melody and several other things
# melody those are all protocol extensions
# trwnh i shudder to think of what would happen if those things became standard
# trwnh that would be a Bad Outcome
# trwnh but still technically they're not extensions
vitalyster joined the channel; vitalyster left the channel
# trwnh they're just undefined behavior. sending a Block is out-of-spec because Block is not supposed to be sent over S2S, but still, the meaning can be inferred
# melody i'm not saying they should be, i'm saying that in order to get actually useful behavior, you need to add protocol extensions, especially for things like groups -- group handling is entirely undefined by the spec, you may be able to guess at what other things will be doing, but once it comes time to actually interop, there will need to either be a written extension or a reference implementation that people can use if they care to interoperate
# trwnh you can do what you want with a Block activity. you can even do nothing, if you don't understand Block
# melody yeah, and that's also a bad outcome
# melody hence the need to define extensions
# trwnh it's a bad outcome only for mastodon
# melody it's a generally bad outcome actually
# trwnh the rest of the non-Mastodon activitypub-speaking network could handle blocks properly on ingress, and everything would be fine
# trwnh that's just open-world
# melody how do you know what "properly" means without a definition?
# trwnh you don't need a definition. "proper" is relative to the implementation
# melody implementations having different block semantics is a nightmare for users who rely on it as a security feature
# melody this is what i'm talking about
# melody you need defined behavior for interop
# trwnh if you receive a message from someone you have blocked, you can decide to filter it out
# trwnh that's business logic
# melody it's especially critical to define the behavior for security features
# melody blocks are not just about incoming messages
# trwnh blocks are about discarding interactions with your Objects
# trwnh so de facto yes, they are about incoming messages
# melody not as long as sharedInbox is in the spec
# trwnh if you want them to be anything more than that, you need to change the problem space from delivery to access control
# trwnh sharedInbox is a mistake
# melody i agree
# melody it's also in the spec
# trwnh the spec also says you should generally use it only for public activities
# trwnh sending followers-only posts to sharedInbox is, in effect, ceding access control entirely, and access control requires *control*.
# trwnh either you are fine with messages being handled varyingly (in which case you continue to deliver them), or you are not fine and you want to decide how they are handled (in which case you should switch to access control)
# melody i'm really sick of fighting with you about this -- a vocabulary is not sufficient for a protocol, there is some group vocabulary, but in order to get groups that can interoperate with other software, you need to add some definitions for how those groups should work, what activities can interact with them, etc -- so that other things can also interact with groups -- otherwise everyone will just do different incompatible things with groups
# trwnh it's like people are too afraid of being "centralized"
# trwnh it is valid to have one server handle things, if you wish to control behavior!
# trwnh at the end of the day, what matters is what happens with what you GET/POST with inbox/outbox
# trwnh that's really what it comes back to
# melody when i say "extension" as in "you would need to add a bunch of weird extensions to usefully use activitypub for real time chat" i mean extension both formally and informally -- you will need to define a lot of behavior that is currently undefined in implementations, and if you care about interop, you should probably write those definitions down
# trwnh i don't think it's fruitful to keep circling the conversation around this
# melody that is an extension
# melody if the behavior is formally undefined it is not useful for interop, once it gets defined (either formally or informally, by way of de-factor reference implementations) it has become a protocol extension -- AP for chat would require such extensions to be useful
# trwnh i guess another thing is that there was some misunderstanding re: the use of "extension", where you refer to extended *specifications*, but i was referring to extensions of the *protocol*.
# trwnh like, activitypub doesn't require webfinger, but mastodon does
# melody you would need to extend the C2S protocol to define how clients should interact with groups, because that's not defined, and will require side effects that are not defined
# trwnh that doesn't make webfinger part of activitypub
# trwnh anyway it's a moot point because there still aren't reference impls of a pure AP server and client
# trwnh i'd love to see that change, though
# melody no, but you could consider "how to use webfinger with activitpub" as a protocol extension that mastodon has defined by way of being a reference implementation, there are certain actions you need to take w/r/t dereferencing webfinger
# melody in order to interop
# melody those side effects as they fit into AP are a protocol extension
# melody an optional one but not optional if you want to interop
# trwnh not optional if you want to interop with *mastodon*
# melody not optional if you want to interop with other implementations that require webfinger
# melody the point is that makes it an extension of the protocol
# melody the semantics behind a lot of things that are undefined end up being security-critical infrastructure, without formal definitions, that's a problem
# melody so to drag this mess back -- if you wanted to build any sort of secure, near-real-time chat over AP you would need to define a lot of undefined behavior in a way that is reproducible and at least somewhat formalized, and I don't think it makes sense to try to do that, because some of the things that *are* already defined don't really fit that use case well
# trwnh disagree with >some of the things that *are* already defined
# melody i like AP mostly, but we shouldn't lie about what it's a fit for
# trwnh it's best for email-like use cases, and linked data webs
# trwnh bc that's what it was designed for
# trwnh that doesn't make it unable to do more communication-based things
# trwnh since it's actor system
# trwnh the "somewhat formalized" way right now is jsonld @context
# trwnh and of course the docs of individual impls
# trwnh but in the larger picture it doesn't make sense to limit oneself to interop with everyone
# melody that defines the vocabulary, not the side effect behavior
# melody you need to define extensions if you have side effects that need to be replicated for interop
# trwnh only assuming the side effects need to be the same everywhere
# trwnh if the side effects are only happening on one server then that's fine
# trwnh like let's say you could comment on a website by emailing a particular address
# trwnh does it *really* matter what the website is doing? it could append your text body to a web page, or it could send it to an application for review/moderation, or any number of things
# trwnh all that matters to you is that you were able to send the text body over email and you didn't need to sign up for an account on that website
# melody it can be important for the side effects to be the same everywhere, there are usually UX implications if nothing else
# melody maybe not for your weirdly contrived use case
# trwnh the only ux implication is if you care at all about sync
# melody you typically care about chats being in sync
# melody which was the entire fucking point of this entire hole you dragged me down
# melody for fucks sake
# trwnh you don't really care about chats being in sync if you've only got one authoritative server though!
# trwnh that's the whole point of having one authoritative server
# trwnh it's authoritative
# melody yeah that's not necessarily a great assumption if you want decentralization, which again, is part of the point here
# trwnh ok so i don't care about having a globally synchronized database of messages at all
# melody good for you, that's a pretty common need for a chat system
# melody which is one of the reasons why i said AP isn't super fantastic for that
# trwnh i care about interop, i.e., i want to send messages without signing up for a million different protocols, all we're doing here is passing around text and maybe some attachments and metadata, how hard could that possibly be
# trwnh so if i can POST to an inbox then that's really all i care about
# trwnh and if i can GET whatever the server has determined is relevant, then that's all i need
# trwnh otherwise i'd keep using irc
# melody it's actually hard if you care about security or harassment or spam or actually successfully communicating
# trwnh i defer to whatever software would be hosting the communications
# trwnh i mean like... if you want a globally synced database then use Matrix
# trwnh theoretically anyway
# melody matrix has other issues
# trwnh but matrix is actually designed for that (nominally0
# melody which is why i said...don't use AP for this
# melody like, AP is a poor fit for chat systems was my entire point
# trwnh AP is "good enough", despite any/all of its shortcomings
# trwnh even email is fine
# melody and then you've been arguing with me about that because like technically you could do it if you sacrificed allt he functionality of a chat system
# trwnh a lot of orgs/projects still use smtp mailing lists
# melody other things that don't really work well in the existing spec re: chat systems, are like, any & all of the semantics associated witih follow/following and delivery to followers since that's not how chat works
# melody i'm not sure why you keep throwing out things that work very poorly as if they are counterarguments
# trwnh my point is that they work
# trwnh and apparently nothing better has come up yet
# trwnh because we keep getting new protocols that reinvent the wheel
# trwnh even AP is basically just email as far as S2S is concerned
# trwnh XMPP could replace everything including HTTP but it hasn't
# melody you're just babbling now, i'm out, this has been exhausting, thanks
# trwnh when over a billion people use facebook
# trwnh i really think it's not productive to start looking at overspecifying the details. if it works it worrks
# trwnh like, heck, we could still be using SMTP for everything if we were concerned with extending it
# melody the details matter, and thinking they don't is the repeated overwhelming flaw of nerd junk
# trwnh details matter but they don't have to matter to everyone. scope is a thing
# trwnh either way i'm all for ending the conversation if you want, since we clearly disagree on fundamentals
# trwnh to me having one server manage a conversation is fine
# trwnh to you it's sacrificing decentralization