Jump to content

Phabricator Administrator's Handbook/Compare Phabricator and ...

From Wikibooks, open books for an open world

People often compares Phorge (ex Phabricator) to other technologies like Bitbucket, GitLab[1][2], GitHub[3], Launchpad[4], Mantis bug tracker, ecc.

Having said that no solution is just "better" than another one, this page will help in having a background in how some various similar technologies are designed and how they differ.

Differences between Phorge and other solutions

[edit | edit source]
Phorge GitLab

Community Edition

GitLab.com GitHub.com Bitbucket.org Launchpad Launchpad.net RiouxSVN.com
Libre Software βœ… yes βœ… yes 🟠 yes[5] ❌ no ❌ no βœ… yes βœ… yes ❌ no
Possibility of Self-hosting βœ… yes βœ… yes ❌ no ❌ no ❌ no βœ… yes βœ… yes ❌ no
Custom domain βœ… yes βœ… yes ❌ no ❌ no ? βœ… yes ❌ no ❌ no
Bug tracker βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes ❌ no
Git βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes βœ… yes ❌ no
Subversion (svn) βœ… yes ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no βœ… yes
Mercurial (hg) βœ… yes ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no
Bazaar (bzr) ❌ no ❌ no ❌ no ❌ no ❌ no βœ… yes βœ… yes ❌ no
Private projects

in free plan

βœ… unlimited βœ… unlimited βœ… yes βœ… yes βœ… yes ❌ no βœ… yes βœ… yes
Members in private proj.

in free plan

βœ… unlimited βœ… unlimited 🟠 max 5 ? ? ❌ no βœ… unlimited βœ… unlimited
Story points in free plan βœ… yes βœ… yes ❌ no ? ? ❌ no ❌ no ❌ no
Answer via email βœ… yes βœ… yes βœ… yes βœ… yes ? ? ? ❌ no
Workboards (Kanban) βœ… yes βœ… yes βœ… yes βœ… yes ? ? ? ❌ no
Task supports

parents and children tasks

βœ… yes ❌ no[6] ❌ no[6] ❌ no ? ? ? ❌ no
Task preserves URL

even if the project changes

βœ… yes ❌ no ❌ no ❌ no ? βœ… yes βœ… yes ❌ no
Task can be created without a project βœ… yes[7] ❌ no[8] ❌ no[8] ❌ no ? ❌ no ❌ no ❌ no
Bug can affect multiple projects βœ… yes ❌ no[9] ❌ no[9] ❌ no ? ? ? ❌ no
Calendar βœ… yes ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no
Chat (basic) βœ… yes ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no ❌ no
Question/Answers (basic) βœ… yes ❌ no ❌ no βœ… yes ❌ no ❌ no ❌ no ❌ no
Docker registry 4 every repo ❌ no βœ… yes βœ… yes βœ… yes ? ? ❌ no ❌ no
Wiki βœ… yes βœ… yes βœ… yes βœ… yes ? ? ? ❌ no
CI/CD βœ… yes βœ… yes βœ… yes ? ? ? ? ❌ no
CI/CD can run on every single commit βœ… yes ❌ no[10] ❌ no[10] ? ? ? ? ❌ no
Webhooks for commits βœ… yes βœ… yes βœ… yes βœ… yes ? βœ… yes βœ… yes ❌ no
Webhooks for tasks βœ… yes βœ… yes βœ… yes βœ… yes ? βœ… yes βœ… yes ❌ no
Pastebin βœ… yes ❌ no ❌ no βœ… yes ? ? ? ❌ no
Tasks can be visible only to me βœ… yes[11] ❌ no[12] ❌ no[12] ❌ no ❌ no ❌ no ❌ no ❌ no
Task description is collaborative βœ… yes[13] ❌ no[14] ❌ no[14] ❌ no ? ❌ no ❌ no ❌ no
Code in proposals is collaborative

(e.g. code in merge request)

βœ… yes[15] 🟠 no[16] 🟠 no[16] 🟠 no ? ? ?

Some key differences between Phorge and other software and services.

License and solutions

[edit | edit source]

GitLab, Launchpad, Phorge and Mantis bug tracker are all free software. This means you have the freedom to study, modify, improve and share them. This means you can:

  • self-host these platforms on your own servers (100% data ownership)
  • have an on-premise solution (your servers but official assistance)
  • find a service provider (someone taking care of everything on their infrastructure)

Bitbucket and GitHub, instead, are proprietary software as a service and this means they take care of everything but you have not the freedom to study, modify, improve and share the platform (you can't install it on your server ecc.).

GitHub, GitLab, Phorge and Launchpad can be used "as a service", provided by their respective companies. Actually Phorge official service does not allow gratis registration to everyone. Anyway, Phorge, GitLab and Launchpad may be used "as a service" by some providers (not promoted from this book).

Source version control

[edit | edit source]

Phorge supports multiple source version control systems: git, Subversion, Mercurial. This feature is quite unique.

Launchpad supports both Bazaar[17] and git.

GitLab and GitHub only supports git.

Code Collaboration systems

[edit | edit source]

Phorge supports a pre-commit review inspired by an evolution of email collaboration (e.g. familiar to contributors of the Linux kernel). It means that contributors can share patches, through a web interface called Differential (activated as default), or using the command line tool Arcanist that can facilitate the upload, the update, and the automatic execution of local "linting" and local unit tests before sharing the patch, using the computational resources available on your local computer to know if the patch follow the guidelines, etc. This pre-commit review supports svn, git and Mercurial, and for all these cases, the patch is designed to be saved as ethereal entity that do not need to touch a real official repository to be discussed, and the patch "lands" the real repository only after it's ready (e.g. approved). Different users as default can actively collaborate on different patches (for example the reviewer can always re-write a received patch). Phorge supports both pre-commit review (with Differential), and post-commit review (with Diffusion Commit Audit). Using the post-commit review, problematic commits can be highlighted as such, for example, commits identified as a regression can be easily recognized from the online git history. Phorge is designed to reach a linear project history in the destination repository, where every code proposal is an idea (it means proposed commits are squashed as default) but can be configured differently.

GitLab, GitHub (that only supports git) are built over merge requests (also known as pull requests). It means contributors should have their own separate repository ("fork"), as it's necessary a repository-2-repository interaction on the same server to accept code proposals, where every code contributor has their own repository, or has direct access to the official repository. Who wants to propose a patch, so, should be the person who owns the "fork" and that person should activate the merge request. The code proposed from a merge request is not supposed to be collaborative, in the sense that other users usually cannot edit it, often including the reviewer that cannot fix / re-write the patch (particularly true if the code proposer worked on the primary branch).

Launchpad is built over merge requests.

Permissions

[edit | edit source]

In Phorge, the privileges of almost every object can be tuned for custom visibility and edit privileges. This feature is quite unique. Example of a custom visibility is having a repository "Editable only by Administrators, and Users in the Security group, and Mario Rossi, but only when Moon is full". You can have global defaults like "Visible to everybody" and "Editable by Trusted Contributors". You can create objects (e.g. Tasks) that are only visible to you, so you can organize your work in private stubs before their publishing. This feature is also used to create secret Passphrases "only visible to me", etc.

In GitHub, GitLab and Launchpad this is limited, so, maybe it's simpler. Anyway you cannot have a public issue on a private repository, and you cannot have an issue that is "Visible only to Mario Rossi", or "Editable only by Trusted Contributors", etc.

In Mantis bug tracker, only Tasks can be hidden. They have only two states: Public and Private (where Private is a fixed list of users).

Permanent deletions

[edit | edit source]

Phorge is somehow paranoid about permanent destruction of objects from the web interface. Usually, objects can be archived, marked as deleted, but not permanently deleted. You may need access to the server command line to do important operations, like repository deletions, etc. The reasons about this choice are explained in the documentation page about Permanently destroying data in Phorge. In this way, normal Administrators cannot do any big mistake from the web interface.

In GitHub and GitLab it's easy instead to completely destroy a repository, if you are an Administrator.

Tasks dependency

[edit | edit source]

Phorge has a very flexible dependency system to declare: What are the parents of this Task? What are the children? Note: plural in both cases. So, you can organize very complex work that involves big multiple departments and projects in a visually understandable way. Example in Wikimedia Foundation: https://phabricator.wikimedia.org/T229015

In any other platforms, this feature is very basic. Usually, you can just have one parent, and multiple children.

In Mantis bug tracker, the system is quite flat, and normally people just don't assign parent/children Tasks. This is handled like an extra attribute and not visually shown as a tree.

Visual Work progress

[edit | edit source]

In Phorge, you can assign "Points" to Tasks. So that, a Task is much more complicated than another one and takes more time, etc. Then, you can assign "Point limit" to Workboard columns. Then, every column shows how are you going, if you are going in burnout. If you close a Task, the progress bar advance by its Point factor and it's visually useful. Also, for each Project, there is an automatic render that shows your "Burnout chart", so that you see you much Open Tasks a project is receiving, how much Tasks are closed over time, to see if your team is efficient or under total burnout etc.

Please add other comparisons.

Other notes

[edit | edit source]

There is also an interesting and quite neutral comparison between Phorge and GitLab, talking also about Bugzilla, GOGS, gitea and Pagure.

You can further read it from the GNOME wiki:

Notes

[edit | edit source]
  1. ↑ wikipedia:GitLab
  2. ↑ https://about.gitlab.com/blog/2021/08/13/five-great-phabricator-features-inspired-gitlab/
  3. ↑ wikipedia:GitHub
  4. ↑ wikipedia:Launchpad (website)
  5. ↑ In the specific website GitLab.com there is a proprietary CAPTCHA during the account registration. This proprietary component however is not activated for logins or for further actions. This proprietary component is not activated as default in GitLab Community Edition.
  6. ↑ a b In the software GitLab, an Issue cannot be marked as parent or children of another issue. In GitLab you can only create "sub-work" by visiting an issue and creating "Work Items" under it, but this supports only one level of nesting and it's a sort of simple TODO list, and not a way to relate an issue with other issues. You cannot say that an issue is blocked by another issue, etc.
  7. ↑ In Phorge, a task can be created, with or without projects. The project(s) can be attached later after creation. For example you can collect company bugs and attach the relevant projects and teams later, after proper triage.
  8. ↑ a b In GitLab, an Issue can be created only if it's created from their project. An Issue cannot be created without a Project and therefore you cannot attach a Project only after triage, etc.
  9. ↑ a b In GitLab, an Issue can have exactly 1 Project. You cannot have a single Bug that affects multiple Projects (or Groups) etc.
  10. ↑ a b In GitLab, the CI/CD is supposed to be run only on the latest commit received by your push. Example: if you push 5 commits, the CI/CD is supposed to be executed only on the last commit. This is generally not configurable in GitLab.
  11. ↑ In Phorge, in whatever project, you can create your very private tasks, that are visible only to you. This is useful to create stubs, to prepare high-critical security issues, or also for a boss to organize the work of their coworkers without bothering them, or vice-versa, as a coworker, to keep track of the work of your boss without bothering anybody else.
  12. ↑ a b On GitLab, you cannot go on a project and create some issues there that are only visible to you. You cannot create some super-private TODOs on your company project (or a public project), and you cannot privately organize other people's work on a generic project, etc.
  13. ↑ In Phorge, Tasks are highly collaborative as default and generally the Task description is editable by a wide range of users (default: All users). There is a global default that can be easily changed. Every Task has their own Edit policy that can be easily changed as well. People can create custom Task creation forms with custom default Edit policy.
  14. ↑ a b In GitLab, only the author of an Issue can edit their task description, plus, the project developers can edit that task description, but other people can only add comments, without being able to edit the task description. This is usually not configurable in GitLab.
  15. ↑ In Phorge, the proposed patches (through the Differential component, active by default) are highly collaborative, and everyone is encouraged in improving a patch to help the author, for example, easily amending the change of the original author as default. This is possible since, in Phorge, a proposed code patch is an ethereal content that does not require a repository to work, and therefore does not require their own repository protections. In Phorge, every patch can have their own collaboration (Edit) preferences. The default can be easily tuned side-wide.
  16. ↑ a b In GitLab, the code in the merge requests is usually not intended to be collaborative: it's very frequent that even the repository maintainer cannot add more commits or amend commits from the fork, since the forks, as default, do not allow this kind of collaboration. This is especially true if the owner of the fork works from the primary branch that has additional protections. This has sense in GitLab where "forks" live their own life, but it doesn't make much sense if you want to actively help external contributors, or if these contributors should be able to actively help each other on the code, to propose a good code quickly. Given the nature of GitLab, this default is not easy to be changed side-wide. Collaboration on patches does not cause credit problems (e.g. ghost writers), since each change on a patch is tracked.
  17. ↑ wikipedia:Bazaar (software)