Bzr is dying; Emacs needs to move
lists.gnu.org
lists.gnu.org
But then he seems to define maintenance as having fixed a specific bug that's been around for over a year, blocking a point release.
He admits that he can't follow the developers list to see if they're genuinely doing active maintenance (reasonable enough: he has a lot on his plate), but also won't accept the testimony of Emacs developers that the mailing list is dead and there's no evidence of real maintenance.
When questioned, he says that there's too much at stake to abandon bzr if it can be avoided at all. But the proposed replacement is GPL software. This is just madness.
Refs: http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg009....
http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg008...
(and surrounding posts).
Is this news to you?
Cf. e.g. http://www.jwz.org/doc/lemacs.html
Second, it is debatable whether sticking to Hurd was a good or a bad idea technically. Imagine if Stallman and co. managed to convince a good number of developers that it was a good idea and the kernel was competitive with Linux, BSD's, etc. If you believe you have a technically superior vision for your product, should you compromise on it just because people who do not share in your vision will not join you?
In the end, I think what killed the pure GNU/Hurd OS was bad PR and absolutism. Hurd as a technical question was just a small part of that. Remember, the debate between the Free and the Open Source guys was pretty fierce. Today we use terms like FOSS to describe all open software, but when Linux and Hurd were young these were different camps with opposing philosophies, and the one that appealed to more developers won out. In simplistic terms, you can think of this as the VHS vs Betamax debate. Can you blame the Betamax backers for continuing to try to push it and "killing" it as a result?
Also my statement was going by the words of the Hurd's former project leader Thomas Bushnell:
"RMS was a very strong believer -- wrongly, I think -- in a very greedy-algorithm approach to code reuse issues. My first choice was to take the BSD 4.4-Lite release and make a kernel. I knew the code, I knew how to do it. It is now perfectly obvious to me that this would have succeeded splendidly and the world would be a very different place today.
RMS wanted to work together with people from Berkeley on such an effort. Some of them were interested, but some seem to have been deliberately dragging their feet: and the reason now seems to be that they had the goal of spinning off BSDI. A GNU based on 4.4-Lite would undercut BSDI.
So RMS said to himself, "Mach is a working kernel, 4.4-Lite is only partial, we will go with Mach." It was a decision which I strongly opposed. But ultimately it was not my decision to make, and I made the best go I could at working with Mach and doing something new from that standpoint.
This was all way before Linux; we're talking 1991 or so." [1]
http://www.groklaw.net/article.php?story=20050727225542530 [1]
You mean linux? That isn't a huge number.
>and are installed on a staggering number of devices
The staggering number of devices you refer to almost exclusively run busybox or one of the similar projects. GNU software is hugely bloated and not a good choice for embedded systems.
>Second, it is debatable whether sticking to Hurd was a good or a bad idea technically
No, it was fine technically. It had no developers and so nothing happened. Minix exists, obviously microkernels are possible.
Fair enough, I read "in" as a synonym for "on" but read in a less casual way the difference could be important.
Even in the "in" case I think many BSD's used GCC as the default compiler (CLANG seems to be taking over now).
I'm not sure where I read this originally but I just googled this source which seems to back it up:
I don't know much about how these people work, but I always figured Mach at Apple is just about momentum and familiarity of contributors, rather than technology. NeXT hired Tevanian who worked on Mach at CMU, they spent roughly a decade hacking on Mach, then Apple did the same. I'd imagine they employ people who know Mach well and haven't seen it as worthwhile to replace it.
I even remember they had this goofy project "MkLinux", which sought to put Linux in the position that BSD carries with XNU, on top of Mach... Just goofy stuff, unless you figure they had Mach hackers on staff.
https://developer.apple.com/library/mac/documentation/Darwin...
This seems a bit delusional. I don't think it's controversial to say that Apple's biggest differentiators exist at higher levels than kernel space. I'd go so far as to say that anyone who claims that Apple's success is rooted in XNU and that the same could not have been done with Linux or *BSD at the lowest layer and all other pieces being equal does not understand what a kernel is.
But this is not a suggestion for them to scrap it, necessarily. As I said in some other comments on this thread, I think the real reason is that they had people that knew their existing kernel well, and don't see a need to replace it.
See my comment up thread about Jordan Hubbard's plans.
xnu is also a monolithic kernel, just with some nice message-passing primitives. Think Mach 2.5.
Edit: ok, I just figured out my source of confusion. IOKit allows userspace drivers, which can crash without resulting in panic.
He fully acknowledged that he made a mistake in going with Mach and as soon as Linux took off FSF focused on providing the necessary software to combine with Linux into an operating system and placed Hurd on 'life support', where it's been ever since.
Let's see if someone did the following things to the python project:
1#: Hire away the package maintainer. Then rather than continue and finish any current work, effectively remove that person from the community project.
2#: Redesign underlying structure of the project (like say, PyPy), but don't discuss any changes with the community. No PEPs, no discussion on mailing lists, no communication what so ever.
3#: Ignore current list of new feature being worked at. Community goals are unimportant.
4#: Add code regression! Do not care about maintaining performance.
5#: Demand that the changes get implemented immediately in next official release.
Would anyone expect that to actually work today? Sure, Stallman could be more diplomatic and find (and succeed) with a middle ground solution, but the above steps are not how you join an ongoing software project.
I also read the argument about the redesign of the event system and was pretty flabbergasted. The argument seems to reduce to "lucid emacs decided to design a proper event datatype because having an event be entirely represented by a simple integer keycode both lost information and made it impossible to represent certain keystrokes" versus "but ints are simple and backward compatible!"
The guys at Lucid also barely communicated for long periods of time, making collaboration impossible.
That's an argument one can use when asked to spend more time with kids.
> it provides a reasonable excuse for the delays, since nobody was able to take his succession immediately
Huh?!? Open Source model not working or what?
> Huh?!? Open Source model not working or what?
I guess its only illusion and crazy lawyers who like to add anti-poaching clauses in employee contracts. If a company can't handle loosing their top engineers, clearly its the the proprietary model that is not working.
Hah, 20 years in the making!
http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg021...
(There were other reasons, the big one being momentum. XEmacs didn't run on the platform I was on for a long time, so it would have been a switch.)
I grant that's a somewhat overdue feature for Emacs to have (e.g., I've wanted it ever since I set up Dropbox to synchronize my org-mode files across all my boxes), but it's definitely evidence that Emacs isn't lacking of maintenance and improvement.
I wonder: If Emacs rarely gains new features in core, is it because there aren't enough developers doing enough to improve it, or rather because people are having a hard time thinking up new features to add which Emacs doesn't already have?
RMS is a prime example of why management is an important skill. It is inefficient for him to do everything himself. It's also inefficient for him to chase people down for all the details. If he had a solid COO who understood his vision, his organization would be much more effective.
Consider that it has been almost 30 years since GNU Emacs started, for most of this time RMS has been the maintainer, and GNU Emacs continues to this day to be the most advanced, popular and active Emacs there is, while the various forks in existence like XEmacs, SXEmacs lost steam pretty quickly. So it certainly hasn't been all bad on his side.
I presume this refers to Bazaar's status as part of the GNU project, and that RMS did not want to write off part of GNU without being certain he needed to.
Regardless, he has since OKd the switch from bzr:
I don't insist that Emacs should stay with bzr. I chose to support bzr because it was still a contender at the time. [2]
[1] https://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00... [2] https://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00...
edit: formatting
https://paragraft.wordpress.com/2008/05/01/progress-and-the-...
"When questioned, he says that there's too much at stake
to abandon bzr if it can be avoided at all."
The big difference between then and now is that this time you have a very competent developer with an exceptional reputation offering to lead the migration. With esr leading things, there is a lot less at risk.I confess that my perception of Mercurial is the diametric opposite of the author's. Recently I believe I have seen a modest resurgence of interest in Hg and increased uptake. Am I just seeing this through some peculiar VCS-warped glasses?
I believe that much of the popularity of git stems from github making it very easy to adopt, something that bitbucket doesn't seem to have pulled off as well.
What if "Microsoft won the war"? Or vim? Or IBM? Or Java? Or Taco Bell?
Git's architecture is a simple bottom-up engineering approach. The user interface (porcellain) builts upon a conceptually simple core (plumbing). Other VCS have defined nice UI which where then implemented by a core that depends on the UI. This top-down approach means that the core components can suddenly become quite complicated and in the end it is hard for the user to get a deeper understanding of the system.
The funny aspect of this is, that a lot of people complain about Gits bad user interface. It turns out however that Git is really easy to grasp.
Contrast with svn which attempts a very clean porcelain interface with a completely muddled data model underneath. The conflation of repositories, directories and branches in svn makes it impossible for it ever achieve 20% of git's functionality simply because things are so poorly defined.
After using git for 6 months I understood it better than I did about svn in the previous 5 years. I would prefer a better porcelain, but given that software development is my full time job and that I can use git for all software development regardless of the language, I'm happy to commit a bit of muscle memory to git's idiosyncrasies.
Now I am laughing and laughing bitterly. git supports one workflow -- the massively decentralized one. To this day you can't have a simple workflow with git, the one that cvs/svn supported and practically all small project would benefit from, the one that bzr calls a bound branch.
git , I believe , is the textbook case of what the opposite of a user friendly UI is. commands have switches which change the command so fundamentally it should be another command. Which noone wants 'cos there are like 140 commands already. switches which across commands do the same thing but are named differently. The same command doing wildly disparate things without any indication of what's happening -- try git checkout file, and guess what the state of file will be. It might from the staging area or it might come HEAD if it wasn't staged. Nuts.
What? Of course you can. I've worked on teams that did it. You are talking total rubbish.
How do I reduce that complexity? I always pull and never fetch, which helps slightly, but only slightly; pull seems to fetch other branches, so it's still possible to have my copy of a branch end up behind my remote-tracking copy of that branch. There's no command analogous to pull for "add and commit and push", so that's always a second step to possibly forget (I don't want to rely on an alias as I work on a number of different machines). Most problematic at the moment is that there's no way to tell the difference between an up-to-date branch and a non-remote-tracking branch, so I sometimes delete branches that I haven't fully pushed, because I forgot to make them remote-tracking, so they didn't show up as behind when I "git status"ed.
I've been on a team that transitioned from SVN to Perforce, the again to Git, keeping the same workflow all the way through.
It isn't the way that I prefer using git, but it works perfectly well.
That's the situation I described. We still have the problems I mentioned: sometimes we commit without pushing (particularly because we sometimes didn't set a branch to be remote-tracking and didn't realize this), and sometimes our branches are behind our copy-of-the-remote-branch because we pulled different branches (which leads to bogus merges in the history).
If your team member forgot to push and you put out new changes, that is a problem for him to resolve. If you forgot to push, and your team member put out new changes, that is a problem for you to resolve. Workflow wise, this all works the same as it does with any other centralized workflow.
If you forget to check for updates... well that is something that happens in other centralized schemes as well. You figure it out when you go to push and it fails, you correct it, then you are good to go.
Sure, but you hit the problem twice as often in git, because you have to do twice as many things.
> If you forget to check for updates... well that is something that happens in other centralized schemes as well. You figure it out when you go to push and it fails, you correct it, then you are good to go.
In SVN that doesn't show up as a merge in the history.
Well no, I don't...
If this really is a frequent problem for you, then you might want to consider adding a note to the end of git-commit's output to remind you to push, or even just aliasing git-commit to push by default. I would recommend that you instead learn how to use git, but failing that...
> "In SVN that doesn't show up as a merge in the history."
If you don't want to resolve those situations with a merge, then don't resolve those situations with a merge... Rebasing exists for a reason.
You might like "git pull --rebase"
Git allows you to follow a centralized process perfectly fine. However if you choose to not follow a centralized process, it will not force you to.
I don't track my other developers' feature branches locally unless I need to view them.
Please write something to explain it. I must be pretty dumb, because I don't get it, even after reading about ten explanatory texts.
Branching/merging/committing is pretty straightforward. The problem is that some commands seem to be very convoluted. For example, why does reset do four different things depending on whether it's soft or hard or plain? I keep having to Google to find how I can revert my latest commit.
Another thing I have trouble with is obscure failures. Obviously this isn't something I can just learn, but there are times when git fails for a reason I don't understand...
2. GitHub
That's it really.
Vim did win the war; there's still nothing better.
IBM did win the war, and then shot themselves in the foot with pricing on their new generation (which generation was a pretty radical shift). There's not much chance of git doing that.
Java did win the war; its competitors from the time are largely dying (Objective-C has had a kind of zombie revival due to iOS, but I don't expect it to last). You could argue that Ruby has overtaken it, but again the changes over the last ten years of ruby - and the influence of rails - have been enormous.
I don't think we should stop trying to make a better VCS. But I do think we should accept that Git has won against bzr and hg in their current form; neither of those will displace git without radical changes that they are probably unsuited to make. Most likely the successor to git will be a new program entirely.
I'll just put this here for you:
https://code.google.com/p/vim/source/browse/src/eval.c
Yes that's nearly 25,000 lines of mixed spaces and tab filled pre-C89 C with 492 occurrences of #idef, many appearing in the middle of a function definition. I recently ran vim with debug symbols compiled and it was nice enough to dump a nice 4GB regular expression log file in my project directory. The way to turn that off is to find some ifdefs and comment them out. If vim won then well, I'm not sure what winning means. I've switched to emacs with evil, which in my opinion is better than vim in a lot of ways.
> (Objective-C has had a kind of zombie revival due to iOS, but I don't expect it to last).
Yeah ok, "zombie-revival" sure, your credibility gets a score of 0 here. This isn't an argument, it's a prediction, and a stupid one. Nobody will come back to check your comment in 5 or 10 years and call you out on it. This is just the certain kind of asshat thing you can say and not worry about it coming true or not because you're some anonymous commenter making the internet richer with your irresponsible use of a keyboard.
Winning means the user experience, not the code. And sure, I was lazy, it would be more accurate to say vim and emacs won between them (and are still fighting it out).
> Yeah ok, "zombie-revival" sure, your credibility gets a score of 0 here.
Do you disagree that a) Objective-C was more or less dead prior to the release of iOS b) almost all people currently using Objective-C are doing so solely because it's the language you can write iOS apps in c) absent huge, radical changes, Objective-C will never threaten Java's popularity the way that post-Java languages (C#, GHC Haskell (very different from the language that was standardized in 1990), Go, Scala) are?
Objective-C is used to build applications for Apple software. It's not a threat to Java, but that doesn't mean Objective-C is dead. Objective-C will be around for a long time to come. It's a modern language that powers all of Apple's most recent technology. They have no reasons to change, and there are no signs that Apple is on the verge of disappearing into the aether.
Vim is shitty software. I like the UI, but the thing is single threaded and everything runs on the UI thread. There's no hope for async, or an event loop, or even a settimeout like feature. The code is full of globals and trying to add new features to the thing is going to result in inexplicable, unfathomable seg faults. Vim uses shitty regular expressions in the UI thread to do syntax highlighting which is why that's slow for big files and why the syntax highlighting breaks.
So the code matters. There will never be powerful IDE like features as long it's this single threaded thing that only ever does anything as a response to user input. Given the state of the code, changing this does not seem ever possible.
Run VIM in a sub-process, and communicate with it through a fake terminal. Basically, quarantine the madness.
The "GNU/Linux" vs "Linux" discussion is a long one but I'm pretty sure there's (almost?) no GNU in Android.
Android is very different from the GNU/Linux operating system
because it contains very little of GNU. Indeed, just about
the only component in common between Android and
GNU/Linux is Linux, the kernel.
http://www.gnu.org/philosophy/android-and-users-freedom.en.h...GNU Emacs is much better. It's easier to use and easier to extend.
Least substantiated claim of 2014 so far.
Haha, good one. Many of vim's predecessors are better even, nvi is far nicer to use than vim is for example.
For what? A specific niche of web applications?
A lot of developers using .NET tend to go for Mercurial because a while back it felt a lot nicer to use on Windows. It's why I always preferred using Mercurial. A few .NET shops that use TFP/VSO are moving towards Git for the Visual Studio support, but I've noticed a few Python and PHP developers making the switch to Mercurial.
To be honest, I rarely need to do anything more than the basics so neither has a huge benefit for me. Neither feels particularly faster than the other, and both have comparable GUI tools. Aside from when I am pushing stuff to GitHub I tend to use whichever one pops to my head first on a project. I reckon a lot of developers are probably the same.
Personally, I greatly prefer my source control system to be separate from my development environment or IDE.
Mercurial's the one where you really want to be using it from the command line. It's had VS plugins, but they're all kind of janky by comparison.
In my opinion it is more elegant. Git only works because it installs hacked up Linux utilities on Windows. In practice it might not matter but I feel dirty when I'm using "inelegant" solutions.
I guess it's a matter of taste or opinion but Mercurial is easier to use too. Though if you're just working on something solo the SCM doesn't really matter at all, you just commit and commit (and I mainly work solo).
Personally I also write mostly in Python so I'm naturally drawn to Mercurial.
Then again I've also been looking at and using Fossil for my projects because it's a single binary with no installer which makes it pretty cool in my opinion. It too works well and it's used as SQLite's SCM so I'm confident it won't screw up my projects. The other nice thing (although I haven't used them extensively) is that Fossil also includes an embedded web server that has a wiki and ticketing system so everything's integrated.
It actually relies on some configuration files in user's directory. I had troubles even launching it on a heavy-modified OS. I assumed it was a pretty simple and straightforward CLI tool that could work on bare-bone operating system. I was wrong!
Git on Windows is now blazing fast enough that msysgit will get you by. I still favor the Git workflow even when I am using other SCMs (like right now, where we have a Subversion dependency)
Mercurial remains a better choice for a few use cases where git simply falls flat.
Among game developers, in particular, because of their need to have revision control for large assets, Mercurial seems to be more popular than git due to the large files extension.
And realistically, perforce or other solutions appear to be even more popular among that particular developer segment.
Personally, I use Mercurial wherever possible, but that's not because I believe Mercurial to be technically superior, it's just because I hate git's UI.
Perhaps among the general FOSS community git is more popular, but both git and Mercurial have yet to met the needs of many developers.
Most game devs -- I'd say even most devs in grown-up, professional shops -- use p4.
Most game devs -- I'd say even most devs in grown-up, professional shops -- use p4.
Hence why I said "realistically, perforce or other solutions appear to be even more popular among that particular developer segment." My comment you quoted was comparing the popularity of Mercurial to Git, not p4.Also, I'd disagree with your assertion regarding "most devs in grown-up, professional shops". Microsoft's SourceSafe has a large following among the corporate world. And many of the largest tech companies I'm aware of don't use p4 primarily; they use git, mercurial, svn, cvs, SourceSafe, home-grown solutions, etc.
Microsoft use TFS heavily [1].
Right now I imagine most MS projects are TFS but it doesn't appear to be mandated. Maybe for the big, internal-only stuff. ASP.NET is hosted on CodePlex as a Git repo [2] and MEF is Hg [3].
They've just added Git support to TFS and that probably means a lot of MS projects will migrate to Git over time.
[1] http://blogs.msdn.com/b/visualstudioalm/archive/2013/08/20/t...
Bazaar is a different story. Technically speaking, Bazaar isn't going away anytime soon. Canonical's development depends too much on it. The primary problem with Bazaar is that updates on Canonical's side are pretty much limited to dealing with issues that Canonical has, and there is little activity with respect to getting other bugs/issues fixed/addressed.
This is unfortunate, because Bazaar does do a few things better than either Git or Mercurial.
Bitbucket provides a good service.
In light of my other comment, good for Stallman. Seems he wasn't actually so hardheaded as it seemed.
[1] https://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00...
Now? It's A Big Deal to a lot of younger developers. It is almost totemic. If it's not Git and (ideally) Github then.. it isn't worth hacking on?
Do you really want those guys on your project?
(It's not by far the largest one, though, and while I think esr has a point, I also think it'd be of help for some of the current Emacs developers to publish a "How to start hacking Emacs" document, for the benefit of people like me who would love to contribute but who have absolutely no idea where or how to start.)
1. Find thing you don't like 2. M-x find-function RET function-to-fix RET 3. Hack hack hack (use C-M-x or M-x eval-buffer liberally; also, read about edebug) 4. Make diff relative to Emacs base code 5. Send diff to bug-gnu-emacs@gnu.org
What I love about hacking on Emacs is that it's so easy to find the bit of code responsible for a given feature and hack on that code in a running editor. There's nothing like it. If I'm using Firefox and don't like the address bar, I need to go dig through XUL, find the thing I don't like, and restart Firefox. Emacs? You just find the function and edit it right in the editor.
Smalltalk. I once crashed my Squeak environment by making "true := false".
After diving into Emacs' codebase, changing or tweaking a few things that bug me, there are a few walls to climb when actually contributing those changes. I.e. cleaning up the code, creating a patch/pull request, outlining changes and intentions, etc. An unfamiliar VCS adds another burden to the contributor. Remember that we are not talking about people who are paid for diving into their employer's VCS but about people who primarily work on other projects.
Frankly, that ability is more important than the choice of DVCS: There's more value from most people standardising than in picking the "optimal" DVCS just because of the lowered barriers to participation.
I think the issue is not only bzr vs Git. It's also, if I understand things correctly, the super restrictive license that the core Emacs has, making every developer sign papers and send them (by snailmail!? or are scans allowed!?)... And if you several other contributors helping you, you must have them all sign these papers.
I've seen at least one prolific .el Emacs author (I think the mulled/multi-line-edit author) complain about that: saying that out of 10 people who helped him he managed to have nine of them sign the papers and sent them to him and couldn't contact the last one...
And eventually he simply decided to abandon getting all the signatures and went it's own way (i.e. Github / non-core Emacs, like many do).
I'm not well versed in licenses / GPL things but I'm a long time Emacs users and I'm definitely seeing change: now most of the newer (and great) .el files I add to my Emacs are coming from Github.
The "not a field" of Computer Programming, to appropriate Alan Kay's quip, is so broken that "social and signaling effects" swamp actual facts and information to a degree that makes it look like Astrology. I've been watching this for decades now -- literally.
Dynamic languages were for years after still tarred with being "slow" when both Moore's Law and progress in JIT VMs and generational GC had make them perfectly fine for tons of applications. If the half-life of patently false misinformation is literally about a decade, and what passes as fact between practitioners is less fact than school rumors, what does that say about our "field?"
There are tons of people who use and know git. It's fast, it works pretty well. There's some value in the fact that it's widely known and used (network effects), probably enough that whatever takes its place will probably be not just a bit better, but a lot better, in some way. bzr does not strike me, offhand, as being a lot better. Is fossil?
So in this case, I think that the network effects are an important fact.
I'm talking in general. I think it's good they're going to git.
bzr does not strike me, offhand, as being a lot better.
I never said it was better or worse. My comment is about the "field" and how accurate its "information" is in general. Sometimes social signalling and network effects are good. What disturbs me is that so many of us use this as a substitute for facts and objective analysis.
Taking social signalling and network effects into account is okay. Only going that far and stopping is just dim laziness. (It's also behind the worst examples of sexism and ageism in our "field.")
I think there's something to this. At a guess, people use a heuristic because facts and objective analysis are hard. I don't mean that sarcastically— I mean that it's difficult and complex even if you are not lazy. When people opt for what everyone else is using, they receive the benefits of treading a well-worn path. This isn't an excuse, but I am sympathetic. Some people are just trying to get work done.
On the other hand, that is a poor justification for being too lazy to do the job right. Often a problem isn't as hard or complex as it looks, and you might just learn something while looking into it. You get the idea.
Also, +1 to your comment re: sexism and ageism.
Nope. Unity, Mir, Upstart, all of the new phone/tablet apps and platform tools are on bzr on launchpad.
Not disputing the fact that git has won the war, just nitpicking that point.
Stallman's opinion on this subject - http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg009...
TLDR Stallman doesn't want Emacs to give up on bzr (also a GNU project) yet. This opinion might change now though.
https://github.com/cosmin/git-hg
Submitting patches upstream is also not a problem as Bram Moolenaar only accepts patch files on the dev mailing list.
github also contributed to amplify the adoption as its makes it really easy to use (even thus people generally use git in a non-distributed way with github)
(i do prefer git in usage, tho, but thats subjective i suppose)
If Hg were as good at branching and rebasing, I'd reconsider it.
btw, anyone know of a python command line client for git? I just keep finding stuff for programmatically using git and that's not what I want.
(gitless may possibly be what you want)
Missing manpower: just glance at the mailing list archives.
BitMoover Inc provided free BitKeeper licences to the Linux kernel devs. This was unpopular because of the non-FOSS nature of Bitkeeper. Andrew Tridgell [1] at OSDL became frustrated with some aspects of the software and reverse-engineered its network protocol to develop his own limited client. This caused BitMoover to revoke the licences used by OSDL, which in turn provoked Linus Torvalds (who was at OSDL) to develop the early version of Git. [2]
Bet bitkeeper regretted that decision...
You can rewrite history, fix your mistakes, and generally do whatever you want. When merging, git isn't picky, either: if the code looks the same, it is the same.
In-place branching is hugely useful, just switch your tree in an instant (your editor should update the contents of your files automatically). So is the stash. Overall, it's just a useful tool that doesn't try to teach you "how things should theoretically be done", and never says "well in order to get X, you should have done this a long time ago".
The standard CLI UI is admittedly a weak-point, but it does not appear to have slowed adoption...
Is this an example that goes against the common advice to launch an MVP fast to test the market (and then keep on improving)? It seems that the advice is valid only when there is nothing for the customer to compare the to-be-launched product to. If competing products end up launching at around the same time as yours, the advice may turn its head on you.
The real demand was for a way to publish code and collaborate, and GitHub provided a truly innovative approach (the social aspects, encouraging forking and pull requests) that was miles better than the alternatives (SourceForge was already in decline, Google Code didn't have the social/forking/pull request aspects). I think they would have been successful with any distributed VCS. I always preferred Git, so I'm happy they chose Git, but I think that if they had chosen Hg, we'd be talking about how Hg won the popularity war instead of Git.
Git and Mercurial were Linux affiliated.
In the end, when apps are similar and don't have fatal flaws, it comes down to a popularity contest.
The term is "adaptive radiation", of which the Cambrian explosion is a prominent example. (Unrelated but awesome note: search for "edicarian biota" to look at some body plans that might have won, but didn't.)
At this stage, isn't a "bzr vs. git vs. hg" question at all. It's just "look, it's a patch".
I think this ease and ability to work losslessly with plain text patches gives git a clear advantage over bzr.
This functionality makes it really easy for people who don't know git to interoperate with people who know it.
Lossless interoperability with plain text is a key Unix principle (see TAOUP) and something that bzr lacks.
With bzr, everybody involved with a project must use bzr. OTOH, a project that uses git can work more easily with a whole spectrum of people since sending a simple patch to a mailing list provides exactly the same ease of workflow to git-using developers as a complex multi-stage set of changes that is heavily reviewed and modified before being committed.
(I don't know hg well enough to understand how it fits in here)
What I'm talking about is lossless integration with entire patch sets in the form that git does it with format-patch, send-email and am.
tla was forked into baz (previously Bazaar), and bzr (previously Bazaar-NG) was a rewrite taking into account lessons learned from tla/baz. Darcs is yet another DVCS inspired partly by Gnu Arch.
So while the explosion of new DVCS around 2005 can definitely be traced back to the Bitkeeper incident, I believe the seed for modern DVCS was laid a bit earlier, in 2001, with Tom Lord's Arch. I think Gnu Arch/tla is to be credited with originally introducing many of the concepts of distributed version control.
Of course, if anyone knows of earlier history on distributed VCS or a VCS that isn't in some way a spiritual successor to TLA I would be quite interesting in knowing that.
Tom Lord does deserve much credit for DVCS concepts, but so do Larry McVoy (Bitkeeper) and Graydon Hoare (Monotone).
[1] http://www.catb.org/esr/writings/version-control/version-con...
git has won the mindshare war for mainstream developers, but I've found it to be a useful FOSS alternative for developers forced to use a Windows environment [for business-related reasons, don't laugh..it pays the bills]. Their UI is a bit more intuitive than git's for new users.
Now, if you're a hardcore Linux-stack career dev...get onto git ASAP... but for lesser folks...bzr works just fine...
However, the same also applies to Mercurial, and even though Mercurial is less popular than Git, it still has a lot more devs who use it than Bzr.
Bazaar is bad. :(
git init ; bzr fast-export --plain | git fast-import
I wish. Unfortunately, not all repos we use are owned by us, and using two VCSs is worse than sticking with bzr.
That probably means the duplicate detector has some delay on getting its past submissions data. The rate of submissions these days seems to average one a minute, but the delta on this pair may be different, and it is not apparent by now.
Thanks for the followup.
this. so much. but "social and signaling effects" and "mindshare war" instead. sigh. what /is/ true, though, is the quote from the linked article:
"All problems in computer science can be solved by another level of indirection... Except for the problem of too many layers of indirection."
anyway, in an attempt to return from the hopelessly abstract and say something cogent about hip technologies and the article at hand, umm... i wonder how bzr runs on pypi?
This may be unfortunate, but this is how it is. DVCSs are by no means complete today, and cross-pollination of features continues. An unpopular project that has fewer developers working on it will fall behind. A project that doesn't want to keep switching DVCS has a reasonable interest in the DVCS project's future, since future features will come "for free".
This is “your favorite band sucks” for software. For professional tools, popularity is usually directly tied to merits: notice how frequently people say they started with bzr/hg/darcs/etc. and switched to Git because it was faster/safer/better supported/added features they liked? Most of the competitors seemed to think they'd solved one big problem well enough that people would put up with the “minor” warts but in practice those are the things which you notice on a daily basis. Git was the third or fourth DVCS I tried and even fairly early on it was obvious that considerably more care was going into making basic day to day work easier and safer.
* A wider availability of resources -- tutorials, books, documentation of any kind, a community around the software that can offer help and support to new users, related tools and add-ons. * Evidence of the potential for longevity in the software -- the more popular it is, the more likely it is to continue to receive new features and bugfixes. * Portability of the knowledge of the workings of the software -- for users, this means that investing time and energy into learning the software now is a better investment, because that learning has a higher likelihood of being useful down the road. For people running projects, it means a larger pool of people who already have knowledge useful to contributing to your project.
Your statement basically translates to, "I wish people would use software based on hypotheticals, rather than an evaluation of what it's like to actually use that software."
Sad, but true...
* Linus was using it for the kernel, so it became mature slightly faster (because it had more people's attention.)
* Github happened at the same time Sourceforge stopped being cool (this is the same time that Digg and Reddit started beating Slashdot.)
Also, instant branching are really convenient feature. I remember the time when I was using Darcs that I got lost pretty quickly with 10 copies in 10 directories.
It's a great tool, no doubt; but the user interface is terrible. I use Magit for Emacs which has eliminated my need for the git command line.
- it has a lot of non-orthogonalities and non-closure operations (ie options on one command are different or not present on other commands)
- if the network drops, fetches and pushes have to start from scratch. For fetches, it would be nice to save partial packs and resume them. For pushes over crappy links, doing similar could be a potential DDoS, so setting up some sort of rsync box is probably better.
And in my very biased opinion, Atlassian markets themselves with an aggressively old-school mentality (closed source everything, monolithic software, questionable terms of use, strong force in the enterprise market, etc.), which makes Mercurial look bad by association.
(and I would have cited quite a few other companies/org besides atlassian, who probably contributed as much as atlassian to the development of mercurial)
please, please, you Emacs/LISP gurus out there: make a working modern package manager and integrate the browser like lighttable does. and perhaps rewrite emacs from scratch so that the source code makes sense in today's world not in 1980's world.
unfortunately lighttable is staying closed for much too long, but something like it is desperately needed.
$ sudo braindump bachback.core|tail
;-)
M-x package-install
<package name>
That's with a blank .emacs file on Emacs 24 on a brand new user account I created just to test that for you.
EDIT: (ofc the auto-installing my favourite packages stuff is elisp I wrote)
Wow, now you have access to the package manager.
Emacs is meant to be customized heavily by its users and the language to do so is Elisp. If you are afraid of that then I don't know what to tell you.
You are quick to condemn all Lisps with an assertion that doesn't make sense to me.
package.el works great.
>integrate the browser
That may actually be possible in the future, see http://www.emacswiki.org/emacs/EmacsXWidgets
>perhaps rewrite emacs from scratch
That is just silly. The current Elisp interpreter might be replaced with an Elisp implementation on top of the Guile VM. That would be quite the big upgrade, technically speaking.
>unfortunately lighttable is staying closed for much too long
I agree, I don't have much faith in the "it will be free eventually, just trust us" development model. If the project really wanted to be community friendly then the source code would have been free from the beginning.
You obviously have no idea of how huge undertaking would this be. You are free to write your new editor and call it Fnbdt.
M-x packages-list-packages
> and integrate the browser like lighttable does. M-x eww
> and perhaps rewrite emacs from scratchWould you like a pony, too?
> so that the source code makes sense in today's world not in 1980's world.
I've actually found that Emacs's source it very readable (even the C lisp engine stuff). Do you object to the lisp or to the C?