Email or username:

Password:

Forgot your password?
Top-level
infinite love ⴳ

so at minimum we have the following schema for knows/1

- how to represent it in plain text: "knows"
- how to define it: "is aware of the existence of"

the RDF Schema gives us `label` and `comment`, as defined by the RDF Schema.

- :label "knows"
- :comment "is aware of the existence of"

but we need to know what "label" and "comment" mean as well! not to worry, we qualify those terms with the rdfs namespace:

- rdfs:label "knows"
- rdfs:comment "is aware of the existence of"

17/?

53 comments
infinite love ⴳ replied to infinite love ⴳ

now at this point you're probably wondering what this has to do with social networking. and on a practical level, if you're just interested in building a "social networking protocol", this is mostly all extraneous.

the part that implementers have to deal with is the notion of "context" and, more specifically, how json-ld handles it, and even more specifically, what to do when two shorthand terms conflict.

remember, the open-world solution is namespacing. what does closed-world do?

18/?

infinite love ⴳ replied to infinite love ⴳ

well, let's look at `actor`. in AS2 terms it refers to the entity that performed an activity. but in schema.org terms it refers to someone playing a role in a movie or other performance.

in a closed-world sense, you don't want to be aware of context. you don't want to have to deal with it. but even so, you still have an "implicit context" that you are using, based on how you define each term in your own understanding, what you hardcode into your software.

19/?

infinite love ⴳ replied to infinite love ⴳ

what json-ld does, or what it allows you to do, is explicitly declare a `@context` that is equivalent to your "implicit context".

this works fine if there is only one declaration that is shared exactly between two parties, but it gets complicated when the "implicit context" differs or isn't an exact match.

this means that there cannot ever be a singular #fediverse network, because the "implicit context" differs between each software project. the only guaranteed overlap is the AS2 one.

20/?

infinite love ⴳ replied to infinite love ⴳ

but it's not like AS2 didn't think of this. they wrote in this requirement: w3.org/TR/activitystreams-core

> Activity Streams 2.0 implementations that wish to fully support extensions MUST support Compact URI expansion as defined by the JSON-LD specification.

note, you aren't required to implement all of json-ld. you just need to handle the bit where you can identify the equivalence between a uri and some arbitrary string.

but #fediverse mostly decided this is too hard, and ignore context.

21/?

but it's not like AS2 didn't think of this. they wrote in this requirement: w3.org/TR/activitystreams-core

> Activity Streams 2.0 implementations that wish to fully support extensions MUST support Compact URI expansion as defined by the JSON-LD specification.

note, you aren't required to implement all of json-ld. you just need to handle the bit where you can identify the equivalence between a uri and some arbitrary string.

infinite love ⴳ replied to infinite love ⴳ

now there's a few thoughts i have here:

#fediverse culturally seems to ignore a lot of other things as well. they ignore http caching for example. they ignore http status codes like 301 Permanent Redirect. these requirements are arguably more important than context, and they *still* get ignored.

in fact, most fedi software is mostly just reimplementing Web browsers, but with what they consider to be the "bare minimum" of compliance. and the web they let you browse is smaller than the Web

22/?

infinite love ⴳ replied to infinite love ⴳ

are these things part of the "protocol"? how far does the "protocol" extend to cover? because, as we established, #ActivityPub is not enough to build a fully functional #fediverse -- and a lot of extensions and additional specs are things that ought to be included in this "protocol", insofar as this "protocol" is desirable.

the other thought:

if you ignore things, that means there are cases you're not handling, losing out on robustness. ignoring context is to ignore shared understanding.

23/?

infinite love ⴳ replied to infinite love ⴳ

so what do you actually lose out on when you ignore json-ld context?

you first have to fall back to the "implicit context", where AS2 terms are generally agreed upon, but nothing else is guaranteed.

take something like `discoverable` from mastodon. what does it mean? well, it means whatever is defined in the mastodon codebase and documentation. so we could represent that as joinmastodon.org/ns#discoverab or shorten that with a prefix. but if we do, then most #fediverse will choke on that.

24/?

so what do you actually lose out on when you ignore json-ld context?

you first have to fall back to the "implicit context", where AS2 terms are generally agreed upon, but nothing else is guaranteed.

take something like `discoverable` from mastodon. what does it mean? well, it means whatever is defined in the mastodon codebase and documentation. so we could represent that as joinmastodon.org/ns#discoverab or shorten that with a prefix. but if we do, then most #fediverse will choke on that.

infinite love ⴳ replied to infinite love ⴳ

this is because #fediverse is ignoring context. the implicit context is that `discoverable` means `joinmastodon.org/ns#discoverab but they don't know that. so they can't actually handle the extension in its fullest form.

what AS2 calls out as "full support for extensions" requires being able to identify this equivalence and handle it. again, fedi does... let's call it "partial support".

the "implicit context" is now a hardcoded but unstated requirement of this "protocol".

25/?

infinite love ⴳ replied to infinite love ⴳ

which is to say: #fediverse software generally expects LD-aware producers to compact against their own "implicit context", but they don't always define that context. it's left undeclared and undefined. or it actually *is* declared, but if you give them their own expanded form then they'll not understand it.

it's like someone saying hey, when i say "knows", i mean "is familiar with"

and then you say "john is familiar with sally"

and they respond WTF? what does "is familiar with" mean?

26/?

infinite love ⴳ replied to infinite love ⴳ

it's like... you literally just told me "knows" = "is familiar with", but because of your own ignoring of your own context, you can't handle me saying "is familiar with"?

in this way, as long as the #fediverse remains ignorant of context, they will remain fragile and without any sort of robustness in their "protocol".

the alternative they have is to extend the only context they share, which is the AS2 one. but this doesn't solve the problem. it just officially blesses a single term.

27/?

infinite love ⴳ replied to infinite love ⴳ

if you want to turn "activitystreams" into a "protocol" then sure i guess you can do that

but why? what are the needs we're trying to address here? of what purpose is your "protocol"? social networking? you want a "social networking protocol"?

before you convince people that a "social networking protocol" is necessary, you have to convince people that a "social network" is necessary.

but more importantly, you are contrasting that "social networking protocol" against the "social Web".

28/?

infinite love ⴳ replied to infinite love ⴳ

it is my personal belief that this whole "closed-world social network" vs "open-world social Web" thing is leading to a big disconnect that makes addressing people's needs harder.

because, to be on the "network", you neglect being on the "Web".

sure, your software might still publish your "posts" as Web resources, but that's it. you're not actually granted control or ability to manage Web resources for yourself.

and that's why #ActivityPub C2S is being neglected, among many other things

29/?

infinite love ⴳ replied to infinite love ⴳ

i am personally more in favor of a "social Web" than a "social network".

what i want to do is make it easier for anyone to make a website, and to manage that website.

i want those websites to be able to link to each other in well-defined and clearly-understood ways.

i want to make friends and express myself to the fullest, in varying contexts on various websites, without context collapse.

but it feels like #fediverse is more interested in replicating the "social network" paradigm.

30/30

infinite love ⴳ replied to infinite love ⴳ

addendum 31/30

there's a whole lot of things i could say about "how we get there" but the thread was getting long enough and i want to cut it off here and clean it up into a blog post or something, without drifting too far off the original topic which was to voice my thoughts about the divide itself

infinite love ⴳ replied to infinite love ⴳ

addendum 32/30

there's a separate thought experiment you could do about what it really takes for a "social networking protocol" because honestly you don't even need http. you can do "social networking" over xmpp or email or whatever. or invent your own way to send bytes over tcp/udp/whatever (inb4 xkcd)

seriously tho, newsletters and deltachat and movim and a bunch of other things show that you can do it

blaine replied to infinite love ⴳ

@trwnh nice writeup! Just glancing, so without getting into detail, I think I agree.

This is perhaps my own bias in all of this, but it's interesting that one of the most-consistent aspect of Fedi implementations is their reliance on Webfinger.

I worked on that part because I didn't think the data format stuff really mattered that much, and at worst was going to be stifling. It was excluded from AP for political, http fundamentalist reasons, but [imho] is essential to the networks functioning.

blaine replied to blaine

@trwnh linking, which as you point out is key – to people – depends on regular people being able to share their names. I learned a long time ago that most people aren't good at groking the HTTP part of links, because the structure of links is actually really complex. When you mention xmpp and email, the identifier is the thing that makes both of those networks work.

For me, "fedi" or "AP" or the social web or whatever we want to call it has always been about making personal identity linkable.

blaine replied to blaine

@trwnh when the first round of "social networks" were built, the first thing that got added to the databases were a "users" and a "friends" table, because "the web" doesn't (didn't?) have that.

Decentralizing that is a radical act, and the sorts of things that we can do with a linked [bi-directional] web of people is infinite and bounded only by our imaginations. AS and AP actions and data formats and C2S are, as I think you're saying, just stubs for rebuilding the old world in a new way. ❤️

blaine replied to blaine

@trwnh (useful stubs, and important, hard things to agree on – I don't want to diminish the work of folks on those aspects in any way! Just that I hope we don't limit our imaginations based on the standards of today)

infinite love ⴳ replied to blaine

@blaine yeah, the ultimate goal is letting people link with each other in the spaces that they wanna link up

i think "your website" should be like your home, but also you should be able to go to other websites just as if they were "venues". so you go to the local forum to hang out. but you can still have your activity on that forum broadcasted to your followers. or alternatively you can participate in the forum from your own site, just like you can reply to a github notification email!

infinite love ⴳ replied to blaine

@blaine i'm wondering to what extent fedi would implement webfinger if mastodon didn't require it

i think if i had to really pick a format for identity then it would be a weak preference for FQDN, but having your id be a pretty-url is also okay i guess. but one other thing that i think would be cool is being able to find your contacts via webfinger if they choose to make themselves findable by other means! so you could do wf?resource=tel: or ?resource=mailto: and still get back useful info...

blaine replied to infinite love ⴳ

@trwnh fun fact, webfinger actually supports URLs and [in theory] phone numbers!

The key (and this is a social science and cultural insight, not technical) is that when you ask someone's "name" or "address" they need something that's unambiguous, personal, and opaque in the sense that it works everywhere (online / distributed, it needs to be globally unique, too) or they won't use it.

Bare domains aren't ideal because (1) they're expensive and (2) management is hard.

infinite love ⴳ replied to blaine

@blaine tumblr made it work so idk if it's "ideal" per se but they definitely had a cultural thing going for quite a while with "dot tumblr dot com" even being a meme at some point

it can't be too hard to manage tbh, the modern version of this is atproto handle services that do nothing but allocate you a subdomain for use on bluesky

blaine replied to infinite love ⴳ

@trwnh yup! My long-standing argument is that "jesus of nazareth" *is* the same thing in a social context as an email address / webfinger address, and that "[person] in [context]" is something that's seared into how we do social cognition, whether it's "[name] [family name]" or "[family name] [name]" – i.e., the format per se doesn't matter so much as the recognition that names-for-humans are different from http-style links with e.g. paths and query strings, etc.

blaine replied to blaine

@trwnh the "trick" with webfinger is that it's a way to go from a "name" to an authoritative context (the authority for "x@y.xyz"' is "y.xyz" and the authority for "blah.com" is "blah.com"; the challenge with phone numbers is that it's impossible to infer the authority for +1-416-867-5309 / telcos don't provide a lookup system). That's really it; the rest is a cultural thing.

infinite love ⴳ replied to blaine

@blaine there might not be an authority for a phone number but i think it can be handled more like a combo of "local dns resolver" + "registry of phone number". sure in many cases with identifiers that have an authority component you can just use their webfinger if they have one, but i think it would also be cool to be able to use your own webfinger and "proxy out" as needed, in the same way that dns does it

blaine replied to infinite love ⴳ

@trwnh lolsob. This is/was the whole point of webfinger ("It's DNS, for people") but the mastodon implementation kind of missed that part. But it's trivially possible to do that.

My ideal is to have one "personal address" [per life context, e.g., work, family, social, etc] that points to different stuff I'm sharing in different contexts, with tagging to indicate in which contexts it the various feeds/etc might be useful. e.g., a tech-focused mastodon feed, a pixelfed feed for family, etc.

blaine replied to blaine

@trwnh .. and *critically* for what I think you're saying, there's nothing preventing linking from a webfinger profile to e.g. a wiki or a webpage of any sort, or another identifier like a phone number or a signal account. Again, this is all stuff that informed the original design of webfinger, over 15 years ago now 🙈

infinite love ⴳ replied to blaine

@blaine yup, more or less. the only difference i'd make is that instead of having multiple feeds for mastodon/pixelfed/etc i'd rather it was all done via the same identity

one of the things that i wish were implemented broadly is support for `streams` -- arbitrary collections that you could post into and other people could follow. to my knowledge no one other than google+ has done it. and, well... we know how google+ went...

blaine replied to infinite love ⴳ

@trwnh oh, totally. To be clear, the way I imagine it is that to end users, it all looks like a single identity, and which feed/stream is negotiated based on the context you're using the identity. So, e.g., my main public profile might be "blaine@bcook.ca", and if someone tried to follow me on mastodon, they'd get my "short text notes" stream, and if someone else tried to follow me from pixelfed they'd get my "square format insta-like-social photos" stream.

blaine replied to blaine

@trwnh I'm doing some extreme handwaving over content negotiation and defaults and all of that, but maybe one interesting thing to raise at this point is that once we get here, "blaine@bcookc.ca" isn't a mastodon account – it's me, a person, with all the facets that I want to share with people who have that name to call me by.

It also means that I bring my identity with me into different social contexts, and that means trust, too. And links to other parts of me, etc.

blaine replied to blaine

@trwnh anyhow, for my part, all that's to say that I remain excited for the future, and it's really great to see folks like you posting threads like the above, pushing the boundaries of what we think of as "fedi" and "ap" and so on! ❤️

blaine replied to infinite love ⴳ

@trwnh for sure; lots of ways to deal with the phone number lookup thing, but "security is hard" in that context 😅

aside: I did a little work a couple of years ago on a thing I was calling "NNS" (the "Name Name System") around how we might use modern cryptographic assertions to step back from the relatively "centralized" mode of DNS (and by proxy, webfinger and atproto's approach), but then IPFS etc imploded and the funding/interest dried up. There are some similar efforts out there, too.

bumblefudge replied to infinite love ⴳ

@trwnh @blaine wait aren't 0 and 1 authorities ? if it starts with 2-9, it's a number in the same area code as you're dialing out from, starts with 1 diff area code, starts with 0 diff country code...

bumblefudge replied to bumblefudge

@trwnh @blaine i guess authority isn't the word for that but there's relrefs and absolute refs at least. not sure i follow the proxy out metaphor tho

blaine replied to bumblefudge

@by_caballero @trwnh this would work except for the specific way that number portability is implemented. 😅 At least historically, and very likely still today, the "database" used to map phone numbers as assigned by exchange blocks (i.e., to a given carrier) to phone numbers that have been ported to a different carrier by the customer (under number portability laws) was a set of spreadsheets synchronized by FTP at intervals. Access to said "databases" is entirely contractual.

bumblefudge replied to blaine

@blaine @trwnh uuuuugggghhhhh i wish i could unlearn that hideous namespace governance

blaine replied to blaine

@by_caballero @trwnh so _in theory_ PSTN operators could provide a lookup system, but it'd be jank af at best, and more likely it would be a horrendous unfixable security disaster.

infinite love ⴳ replied to blaine

@blaine @by_caballero i was thinking more that you could declare a tel: as one of your "aliases" at your authoritative wf and then it percolates through the rest of the system

blaine replied to infinite love ⴳ

@trwnh @by_caballero since tel: is extremely fraught, especially nowadays with insane phone spam etc, a Signal/WhatsApp/etc address might be a good alternative example?

I particularly like the "established encrypted messenger" example because the wf->[rel=messenger]-> lookup could get Fedi encrypted DMs "for free."

(obviously lots I'm glossing over that make it more complicated, but in theory it'd be less complicated than many alternatives)

Oblomov replied to infinite love ⴳ

@trwnh this was a fascinating read, thanks for sharing. Looking forward to the blog post.

I've had thoughts along those lines since I've started using Mastodon and getting familiar with AP, which I always saw as an extension of email and Usenet rather than a more general tool for the “social web” —and even for that it's being held back by the absence of a “content independent” AP server (AFAIK the only one in development is Vocata, and it still has some way to go).

infinite love ⴳ replied to Oblomov

@oblomov yeah, there's the old "it's like email but for websites!" which isn't terribly inaccurate, but that's honestly more a consequence of "HTTP POST to ldp:inbox" than anything else in AP. the side effects for each activity kinda stray from that model and go into almost RPC-like territory. there's also some potential redundancy with HTTP verbs, but that's because HTTP verbs don't notify arbitrary audiences (although i guess they could do that with a header!)

Oblomov replied to infinite love ⴳ

@trwnh actually what made me think of “extensions of email and newsgroups” was more the object structure, but on second thought that's more an ActivityStream characteristic than an ActivityPub one, although an actual implementation of the C2S part of AP would still fit the bill in some sense.

(Yeah, the lack of usage of DELETE and PATCH surprised me initially, but the fact it would have needed to also define how to propagate them partially explains it.)

infinite love ⴳ replied to Trit’

@TritTriton idk but it doesn't seem like it at first glance. i'm thinking more about something that shows up in a web browser, combined with another thing that lets you author and manage web resources more easily than current tooling

infinite love ⴳ replied to infinite love ⴳ

@TritTriton it's more like "ugh can we go back to blogs and forums and then build from there? we took a wrong turn with the rise of social media"

Marco Rogers replied to infinite love ⴳ

@trwnh thanks for writing this thread. It sparked a lot of thoughts for me.

I do have one response in the form of a question. What's stopping you from just doing the thing you want? You don't really need permission.

infinite love ⴳ replied to Marco

@polotek me personally? i'm not much of a coder, i'm way better at designing a system and describing how it should work, not so much actually building it. although i am in talks with some folks who seem interested, so uh... maybe check back in like 5 years? 😁 or heck, possibly even two if we're lucky!

Go Up