Recent from talks
Nothing was collected or created yet.
GNU social
View on Wikipedia| GNU social | |
|---|---|
Screenshot of a GNU social website with Swedish localization. | |
| Original author | Evan Prodromou et al. |
| Developers | Diogo Cordeiro and GNU social Developers |
| Final release | |
| Preview release | |
| Repository | |
| Written in | PHP |
| Operating system | Cross-platform |
| Available in | More than 25 languages[1] |
| Type | Social networking service |
| License | AGPL-3.0-or-later[2] |
| Website | gnusocial |
GNU social (and its predecessor StatusNet) is a largely defunct free and open-source microblogging social networking service that implements the OStatus and ActivityPub standards for interoperability between installations. While offering similar functionality to social networks such as Twitter, GNU social seeks to provide the ability for open and federated communication between different microblogging communities, known as 'instances'. Both enterprises and individuals can install and control their own instances and user data.[3][4]
At its peak in popularity, GNU social had been deployed on hundreds of interconnected instances,[5] however has since fallen into disuse as competing software like Mastodon and Pleroma have taken its position as the dominant federated microblogging services. Later on in its lifespan, the project split into two separate branches, with "v2" being a continuation of the original codebase for maintenance of existing instances, with "v3" being a complete redesign of the project meant to integrate further ActivityPub support and modernization of the user experience and its technological back-end. As of August 15, 2022, there had been no new commits to the v2 branch,[6] with the v3 branch also no longer being actively developed not long after by November 25, 2022,[7] with the project essentially abandoned.
Despite its modern obsolescence and dated design compared to modern platforms, GNU social and StatusNet is regarded to be the origin of the Fediverse network and has had a major influence on the design of more modern decentralized social networks that succeeded it.
History
[edit]While being the main project within its lineage, GNU social originally began as a fork of StatusNet. The software was first developed for a service called identi.ca from Evan Prodromou, which offered free microblogging accounts to the public. The software quickly became one of the first popular examples of a decentralized social network, as identi.ca allowed any other server that was running the software to communicate with it, something which had not previously been attempted before in social media at such a large scale.

StatusNet
[edit]Originally, StatusNet (named Laconica at the time) was launched with a communication protocol designed specifically for the project called OpenMicroBlogging (OMB).[8] With version 0.8.1, the name of the software was changed to StatusNet.[9] Version 0.9.0 was released soon after in March 3, 2010, with the developers implementing a newly designed protocol dubbed OStatus, with support for OMB being dropped not long after. Compared to OpenMicroBlogging, OStatus could handle and federate more events and actions than the basic plaintext communication that OMB provided and was based on a variety of other web technologies, allowing for easier adoption of new implementations of the protocol for servers and clients compared to the fully custom architecture of OMB.[10]
With the StatusNet name change, the company developing both the software and OStatus as well as managing identi.ca rebranded from Control Yourself to StatusNet Inc. In August 2010, the company raised a new round of venture capital funds to establish a hosting service under the status.net domain from sources such as First Mark Capital, BOLDstart Ventures, iNovia Capital and Montreal Start Up, raising over $2.3 million in funding up to that point.[11] The hosting service allowed anyone to establish their own StatusNet instance without maintaining a server, similar to WordPress.com and other blogging platforms.[12]
New registrations on identi.ca along with the ability to create new status.net instances was disabled in December 2012, in preparation for a migration to pump.io that has since been named by users of StatusNet and OStatus as "the Pumpocalypse".[13] pump.io was a brand new software package like StatusNet, but with a new protocol designed for general purpose activity streams outside of microblogging and ease-of-use for developers building on the technology, much like the transition from OMB to OStatus. The announcement was seen as unexpected among identi.ca users, who were concerned about the possibility of their statuses being deleted with the transition. At the same time, server administrators running third-party instances and their users who were left behind on StatusNet were also worried, as it was unclear at the time whether future development of the software would be picked up by a new maintainer.[14] The transition for identi.ca users to pump.io was completed on 12 July 2013.[15]
Previous names
[edit]The original name of StatusNet was Laconica, a reference to the Laconic phrase; a particularly brief statement commonly attributed to the leaders of Sparta (Laconia being the Greek region containing Sparta). In microblogging, all messages are designed to be very short due to the traditional 140-character limit on message size, a limitation imported from SMS.
Beginning with version 0.8.1, the name was changed to StatusNet.[9] The developers said that the new name "simply reflects what our software does: send status updates into your social network."[16]
GNU social
[edit]GNU social originally began as a side project of GNU FM (Libre.fm) maintainer Matt Lee, with the goal of being able to federate messages between Last.fm and other instances of GNU FM using StatusNet plugins.[17][18] Around the same time, a developer named Mikael Nordfeldth forked StatusNet with the intention of maintaining it as a personal project, dubbing it "Free Social". However, following identi.ca's transition to pump.io and its developers' sudden abandonment of StatusNet, the projects received more attention from server administrators and other users looking for an actively updated alternative.
Shortly after LibrePlanet 2012, a plan was formed to merge all three projects into a single service.[19] On June 8, 2013, it was announced that along with Free Social, StatusNet would be merged into the GNU social project and stewarded by the Free Software Foundation, with the project since becoming the dominant variant of StatusNet.[20]
During GNU social's lifespan, a popular theme for the user interface named Quitter was used, which was similar to an earlier Twitter interface. Many instances were made specifically using the name Quitter such as Quitter.se, an instance created by the developer of the theme. Before the establishment of Mastodon's popularity and dominance within the network, Quitter was noted as a frequent location for users of Twitter to migrate to when users disagreed with moderation policies[21] or feature updates, such as when an algorithmic feed was added to Twitter.[citation needed]
A fork of GNU social was made called postActiv, which planned to rewrite the backend and user interface of GNU social, as well as to add compatibility for Diaspora's protocol.[22]
Features
[edit]A basic GNU social instance takes the form of a microblogging service with a reverse chronological timeline that features status updates and small messages from followed accounts, similar to other services such as Twitter or Weibo. While users could see their own customized timeline, they could access another timeline that showcased every message that the instance knows of, including from other instances that were connected to each other if someone on the instance followed an account from it. Users could also create and join groups, which allows for discussion and collaboration on specific topics.
Administrators can also customize their server via the plugin system, which allows developers to create new features or modify existing plugins to suit the needs of the instance via PHP. A notable plugin built for GNU social was Quitter, a revamp of the user interface that resembles an earlier version of Twitter's user interface.
See also
[edit]- Comparison of microblogging services
- Comparison of software and protocols for distributed social networking
- diaspora*, a similar contemporary decentralized social network
- identi.ca
- pump.io
References
[edit]- ^ "Translating:GNU social localization". Retrieved 2015-02-08.
- ^ "README file". Archived from the original on 2014-11-03. Retrieved 2015-02-09.
...under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- ^ Terdiman, Daniel (2008-10-06). "Taking on Twitter with open-source software". CNET. Retrieved 2024-08-29.
- ^ Bastien, Malcolm (2008-8-28) Why Laconica Means Big Things For Corporate Micro Blogging Archived 2009-01-25 at the Wayback Machine. Retrieved 2009-1-3.
- ^ "List of Independent GNU social Instances - I ask questions". 2017-02-20. Archived from the original on 2017-02-20. Retrieved 2024-04-04.
- ^ diogo. "diogo/gnu-social". notabug.org. Retrieved 2024-04-04.
- ^ GNUsocial. "gnu-social". Codeberg.org. Retrieved 2024-04-04.
- ^ "GNU social". 2013-06-08. Archived from the original on 2013-08-22. Retrieved 2024-04-04.
- ^ a b StatusNet 0.8.1 (2009-8-28) "StatusNet 0.8.1 - StatusNet". Archived from the original on 2013-01-12. Retrieved 2013-01-12., StatusNet Wiki Retrieved 2009-8-29.
- ^ "Understanding OStatus | StatusNet". 2011-12-26. Archived from the original on 2011-12-26. Retrieved 2024-08-29.
- ^ Finley, Klint (2010-08-03). "StatusNet Raises $2.3 Million for Enterprise Microblogging". Readwrite. Retrieved 2024-08-28.
- ^ Kincaid, Jason (2009-11-20). "Status.Net: The WordPress For Microblogs Gets A Hosted Solution". TechCrunch. Retrieved 2024-09-17.
- ^ "Upcoming changes in the status.net service | StatusNet". 2012-12-21. Archived from the original on 2012-12-21. Retrieved 2024-08-29.
- ^ Nathan Willis (March 27, 2013). "StatusNet, Identi.ca, and transitioning to pump.io". LWN.net. Retrieved 2013-05-07.
- ^ Bryan Behrenshausen (July 15, 2013). "pump.io: the decentralized social network that's really fun". opensource.com. Retrieved 2013-07-15.
- ^ Laconica is now StatusNet "Laconica is now StatusNet « StatusNet – Open Source microblogging service". Archived from the original on 2009-08-31. Retrieved 2009-08-31., retrieved 2009-10-04
- ^ "Microblogging with ActivityPub [LWN.net]". lwn.net. Retrieved 2024-04-04.
- ^ "Disintermedia » A Brief History of the GNU Social Fediverse and 'The …". 2017-04-01. Archived from the original on 2017-04-01. Retrieved 2024-08-29.
- ^ "[Social] Big news! StatusNet, Free Social and GNU social projects merge". lists.gnu.org. Retrieved 2024-08-29.
- ^ "GNU social". 2013-06-16. Archived from the original on 2013-06-16. Retrieved 2024-08-29.
- ^ "Thousands of Spaniards leave Twitter for GNU social". Free Software Foundation. 2015-04-03.
- ^ Tilley, Sean (24 September 2017). "A quick guide to The Free Network". We Distribute. Archived from the original on November 8, 2020. Retrieved July 25, 2023.
Further information
[edit]External links
[edit]GNU social
View on GrokipediaHistory
Origins as Laconica and StatusNet (2007–2011)
Laconica, an open-source microblogging platform written in PHP, was initiated by developer Evan Prodromou in 2007 as a decentralized alternative to proprietary services like Twitter, emphasizing user control and federation capabilities.[5] The software supported short status updates, replies, and basic social interactions, with early versions focusing on web-based posting and RSS feeds for syndication.[11] Prodromou released it under the GNU Affero General Public License to enable self-hosting and interoperability.[11] The platform gained prominence with the launch of Identi.ca on July 2, 2008, the first major public instance hosted by Prodromou, which quickly attracted users seeking an open-source microblogging option amid Twitter's growing popularity.[12][13] Identi.ca implemented federation through the OpenMicroBlogging protocol, allowing cross-site following and content sharing between compatible servers, a feature absent in Twitter at the time.[11] By late 2008, additional instances emerged, demonstrating the software's viability for distributed social networking.[14] In 2008, Prodromou founded StatusNet Inc. (initially under a precursor name) to commercialize development while keeping the core software free.[15] Following initial funding, the project was renamed StatusNet in August 2009 to align with the company's branding and support expanded enterprise features like group subscriptions and plugin extensibility.[5][16] This rebranding coincided with hiring additional developers, including Brion Vibber in October 2009, to enhance scalability and real-time updates.[17] StatusNet's development accelerated through 2011, with version 0.9.6 ("Man on the Moon") released on October 29, 2010, introducing refined timelines, better mobile support, and improved OStatus protocol integration for broader federation.[16] The platform hosted thousands of users across dozens of instances by 2011, including niche communities, though it faced challenges from Twitter's dominance and required technical expertise for deployment.[18] Funding rounds, such as an undisclosed amount in August 2010, sustained professional maintenance amid growing interest in open social protocols.[18]Adoption by GNU Project and Rebranding (2011–2013)
On June 8, 2013, the developers of StatusNet announced its merger with GNU social and the FreeSocial fork, marking a pivotal rebranding that consolidated development under the GNU social banner as an official GNU project.[19] This integration absorbed the primary codebase from StatusNet—originally led by Evan Prodromou—and aligned it with GNU social's focus on free software decentralization, while incorporating contributions from FreeSocial maintainer Mikael Nordfeldth.[20] The move addressed fragmentation in the ecosystem, with StatusNet's commercial origins transitioning to GNU stewardship hosted on Savannah since 2009, emphasizing Affero GPL licensing for server-side freedoms.[2] Leading into the merger, 2011 and 2012 saw preparatory divergences, including the launch of FreeSocial in 2012 as a StatusNet fork prioritizing non-proprietary enhancements and community governance.[20] StatusNet, meanwhile, continued iterations on federation protocols amid growing interest in distributed microblogging, but financial pressures on StatusNet, Inc. facilitated the shift toward GNU-hosted continuity.[6] The rebranding reinforced GNU social's role in the GNU Project's portfolio, distinct from proprietary platforms, by prioritizing verifiable interoperability standards over vendor lock-in.[21] Post-merger, initial releases under GNU social maintained backward compatibility with StatusNet instances, enabling seamless migration for users and operators while advancing PHP-based extensibility.[6] This period solidified GNU social's identity as a stewardable free software alternative, with the Free Software Foundation noting its potential for plugin-based federation expansions.[22]Post-Rebranding Development and Protocol Shifts (2013–Present)
Following the rebranding to GNU social in June 2013, which involved merging the StatusNet codebase with the Free Social fork initiated by Mikael Nordfeldth in 2012, development emphasized maintaining a decentralized, federated microblogging platform under the GNU Project.[20] The project retained its core focus on free software principles, with stewardship shifting toward community-driven contributions rather than commercial backing from the former StatusNet Inc.[6] Key releases post-rebranding included version 1.20.9 on June 22, 2019, which incorporated bug fixes and minor enhancements to federation handling.[3] A beta release of version 2.0.0 followed on July 18, 2021, introducing structural separations between core includes and public-facing components, upgraded OEmbed support via an Embed plugin, and improved media handling systems.[3][23] Development on version 3 commenced thereafter, led by maintainers Diogo Cordeiro, Hugo Sales, and Eliseu Amaro, with ongoing commits addressing extensibility and plugin architecture, though activity has been sporadic compared to pre-2013 cycles.[24] GNU social has not adopted ActivityPub, the protocol that gained prominence in the Fediverse after 2017 via platforms like Mastodon; instead, it continues to rely on the OStatus suite for federation, enabling interoperability primarily with legacy-compatible nodes.[25] This persistence stems from architectural commitments to OStatus's Atom-based syndication and PubSubHubbub for real-time updates, avoiding the JSON-LD serialization in ActivityPub that would require substantial refactoring.[25] Forks such as postActiv have implemented ActivityPub bridges to enhance cross-protocol compatibility, but core GNU social instances report limited federation with newer Fediverse software without custom plugins. Community discussions highlight this as a factor in GNU social's niche persistence amid broader Fediverse fragmentation, with instances like Quitter.se operating until 2017 before shutdowns due to maintenance burdens.[20] Recent efforts include Google Summer of Code integrations for UI improvements and plugin development, alongside repository migrations to NotABug.org for collaborative hosting.[26] As of 2023, the project supports communication via IRC, Matrix, and mailing lists, with emphasis on plugin extensibility for features like polls and events, though user base growth has plateaued relative to ActivityPub-dominant alternatives.[24]Technical Architecture
Core Software Components and Implementation
GNU social is implemented as a web application primarily written in PHP, adhering to PSR-12 coding standards and utilizing PHP 8 features such as strict typing and strict comparisons.[27] The core backend leverages the Symfony framework, wrapped for flexibility to support future adaptations while maintaining modularity.[28] Execution initiates via thepublic/index.php entry point, which the web server invokes for all requests, loading components, plugins, and handling event-driven operations.[29]
Data persistence relies on relational databases, specifically PostgreSQL or MariaDB, interfaced through the Doctrine object-relational mapper (ORM).[30] This ORM employs a transactional write-behind strategy, queuing write operations until explicit flushing to optimize SQL execution and manage concurrency; entities are defined with schemas mapping database rows to PHP objects, supporting standard CRUD operations like persistence, querying, and deletion.[30]
The architecture follows a component-based model emphasizing independence and extensibility: the minimal core provides foundational services including module loading, an event system for inter-module communication, database schema handling, and a translation framework.[31] Essential components, such as those for avatars and posting (e.g., Posting.php), extend a base Component class, implement interfaces, and interact solely via events without direct dependencies.[28] Plugins, inspired by Unix philosophy, serve as optional, reusable extensions that hook into the core or components through events, enabling features like federation protocols without altering base code.[28] This design ensures replaceability—components can be swapped if event contracts are preserved—and prohibits cross-dependencies between plugins or non-core elements.[28]
Programming paradigms blend procedural code (e.g., "on"-prefixed event handlers), declarative event dispatching, and limited functional elements via libraries like Functional PHP for data manipulation.[27] Modules aggregate core functionalities as non-disableable plugins, further organizing the codebase logically while preserving the event-driven, decoupled structure.[32]
Federation and Interoperability Mechanisms
GNU social employs the OStatus protocol suite for federation, enabling instances to communicate and share content across decentralized servers. OStatus, developed as an open standard around 2009–2010, integrates multiple web standards including Activity Streams for content syndication, PubSubHubbub (PuSH) for real-time push notifications of updates, Salmon for cross-instance replies and interactions, and Webfinger for user and resource discovery. This architecture allows users on one GNU social instance to follow, receive posts from, and interact with users on remote compatible servers without centralized intermediaries.[20][33] Interoperability relies primarily on OStatus compatibility, permitting federation with early Fediverse software such as instances of StatusNet (GNU social's predecessor), Quitter.se (a historical GNU social instance active until 2018), and forks like postActiv. For instance, during the 2010s, OStatus facilitated a network where GNU social servers exchanged "notices" (microblog posts) via Salmon "slaps" for threaded conversations and PuSH subscriptions for timeline updates, supporting features like remote following and public content visibility. However, OStatus's reliance on Atom/RSS feeds and XML-based exchanges has been critiqued for complexity and inefficiency compared to JSON-centric modern protocols, potentially leading to federation delays or failures in high-volume scenarios.[34][25] To address limitations in cross-protocol communication, a community-developed ActivityPub plugin was introduced in 2018, allowing partial interoperability with ActivityPub-based platforms like Mastodon and Pleroma. This plugin translates OStatus elements to ActivityPub's actor-model and object-oriented structures, enabling inbound and outbound federation for public posts, follows, and basic interactions, though private messaging and advanced features remain unsupported or inconsistent. A 2019 Google Summer of Code project further extended this by refining ActivityPub implementation for better compatibility with pure ActivityPub nodes, including improved handling of federated replies and content delivery. Despite these efforts, core GNU social versions default to OStatus, and full seamless interoperability requires plugin activation and instance-specific configuration, with reports of intermittent issues due to protocol mismatches.[35][36]| Protocol | Key Components in GNU Social | Interoperability Scope |
|---|---|---|
| OStatus | Activity Streams, PuSH, Salmon, Webfinger | Native with OStatus-compatible software (e.g., historical StatusNet forks); limited to public timelines and basic interactions |
| ActivityPub (via plugin) | Translated feeds and actors | Partial with Mastodon/Pleroma; supports follows, posts, and replies but excludes encryption or groups; requires 2018+ plugin |
Features
Microblogging and User Interactions
GNU social's primary microblogging function centers on users composing and publishing short textual messages termed notices, which are typically limited to 140 characters to encourage concise communication akin to early Twitter posts.[38] These notices can incorporate hyperlinks, multimedia attachments via plugins, mentions of other users using the @username syntax for direct notifications, and hashtags (#tag) for topic-based discovery and searchability across the network.[39] Users access notices through personalized timelines aggregating content from followed accounts, public timelines displaying site-wide activity, or federated feeds from remote instances via protocols like OStatus.[4] User interactions emphasize threaded conversations and endorsement mechanisms. Replies allow responses to specific notices, forming reply chains or threads that maintain context and are visible to participants and followers unless privacy settings restrict visibility.[40] Favoriting enables users to bookmark notices by starring them, compiling a personal collection of appreciated content accessible via user profiles and potentially shared in timelines.[41] Repeating functions as a sharing tool, duplicating a notice to the repeater's followers while crediting the original author, facilitating amplification without altering the source material.[40] Additional interaction layers include group-based discussions through bangtags (!groupname), which route notices to designated subscribers for focused exchanges, and direct messaging for private one-on-one communications, though the latter relies on instance-specific configurations.[42] Federation ensures interactions span instances, with remote users' notices appearing in local timelines upon following, and actions like replies or repeats propagating via standardized protocols to maintain interoperability.[10] Privacy controls, such as subscriber-only or direct audience restrictions, modulate visibility, prioritizing user autonomy over default public exposure.[43]Customization and Extensibility Options
GNU social provides extensibility through a modular architecture that distinguishes between plugins for adding new functionality and components for overriding core elements. Plugins are housed in thelocal/plugins/ directory, structured with a composer.json file for dependencies, a config.yaml for module-specific settings, and a primary PHP class file (e.g., Name.php) that extends App\Core\Modules\Plugin. This class implements methods like onEventName to hook into system events, along with required version() and onPluginVersion handlers for metadata such as name, author, and description.[44] Optional subdirectories support source code organization (e.g., Controller, Entity), templates, and tests, enabling developers to extend features like custom actions or integrations without modifying the core codebase.[44]
Components, placed in local/components/, extend App\Core\Modules\Component and follow specialized APIs under src/Core/Modules to replace or augment built-in behaviors, such as altering data handling or UI rendering. This design adheres to a modular philosophy, allowing small, focused extensions akin to Unix tools, which facilitates community-driven enhancements via the plugin API.[21][44]
User interface customization is achieved primarily through themes, which involve modifying CSS stylesheets and image assets, though direct HTML alterations remain limited to prevent compatibility issues. The designer documentation outlines motifs and a design language to guide theme and plugin UI development, ensuring consistency across instances.[45] Server-level options include YAML-based configuration files for plugins and broader instance settings, such as enabling specific modules or adjusting federation parameters, often managed via config.yaml files that convert camelCase names to snake_case for internal processing.[46] These mechanisms support self-hosted adaptations, from single-user setups to federated networks, while maintaining interoperability.[21]
