Air Mozilla: Connected Devices Meetup: Enflux with Mickey Ferri |
Mickey Ferri introduces Enflux in the San Francisco commons!
|
|
Air Mozilla: Connected Devices Meetup: FlyWeb with Jonas Sicking |
Jonas Sicking introduces us to "FlyWeb" in the San Francisco commons!
https://air.mozilla.org/connected-devices-meetup-flyweb-with-joanna-sicking/
|
|
Matthew Ruttley: Fixing a Django/Vagrant error in ifup/ifup-eth |
I normally test out a django project using a local vagrant instance. Vagrant creates a virtual machine running the django project which instantly recognizes changes to code. However, I was running a test recently and the VM suddenly started outputting error messages as follows. Note: I’ve redacted some parts of these terminal outputs.
(Scroll to the bottom of this post to skip to the solution)
(webapp) [vagrant@project vagrant]$ ./manage.py test Traceback (most recent call last): File "./manage.py", line 8, inexecute_from_command_line(sys.argv) File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/raven/contrib/django/management/__init__.py", line 41, in new_execute File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/core/management/base.py", line 413, in execute File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 147, in activate File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 216, in activate File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 205, in translation File "/home/vagrant/venvs/webapp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 118, in __init__ IOError: No translation files found for default language en-us.
No translation files? I’ve never heard of them. Thinking it could be a random error, I tried to run the test again and got:
(webapp) [vagrant@project vagrant]$ ./manage.py test -bash: ./manage.py: /usr/bin/env: bad interpreter: Input/output error
I tried logging out of the instance and got an I/O error:
(webapp) [vagrant@project vagrant]$ logout -bash: /home/vagrant/.bash_logout: Input/output error
Attempting to ssh into the VM again is refused:
MR-PC:project mruttley$ vagrant ssh ssh_exchange_identification: Connection closed by remote host
Sometimes the “turning it off and on again” solution can work, so let’s try vagrant reload:
MR-PC:project mruttley$ vagrant reload
==> default: Attempting graceful shutdown of VM...
default: Guest communication could not be established! This is usually because
default: SSH is not running, the authentication information was changed,
default: or some other networking issue. Vagrant will force halt, if
default: capable.
==> default: Forcing shutdown of VM...
==> default: Checking if box 'bento/centos-7.1' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
^C==> default: Waiting for cleanup before exiting...
MR-PC:project mruttley$ Vagrant exited after cleanup due to external interrupt.A timeout error this round. The error seems related to authentication, but it’s not the whole story. The VM is running according to global-status, despite not being correctly set up, which is a bit strange.
MR-PC:project mruttley$ vagrant global-status id name provider state directory ---------------------------------------------------------------------------------------- 0e8faad default virtualbox running /Volumes/Data/Users/mruttley/Documents/code/project
I also run a GUI called VirtualBox which is sometimes handy for visualizing all VMs on your laptop. Checking there, it also seems to be present – so global-status wasn’t lying to us. Let’s try halting it:
MR-PC:project mruttley$ vagrant halt
==> default: Attempting graceful shutdown of VM...
default: Guest communication could not be established! This is usually because
default: SSH is not running, the authentication information was changed,
default: or some other networking issue. Vagrant will force halt, if
default: capable.
==> default: Forcing shutdown of VM...A forced shutdown this time. So far debugging this error isn’t going well. It is totally strange because the VM was working perfectly beforehand. Vagrant up after this produces the same timeouts:
MR-PC:project mruttley$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.1' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...Let’s try destroying the vagrant instance completely….
MR-PC:project mruttley$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
==> default: Running cleanup tasks for 'ansible' provisioner...
==> default: Running cleanup tasks for 'hostsupdate' provisioner...And starting from scratch:
MR-PC:project mruttley$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/centos-7.1'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.1' is up to date...
==> default: Setting the name of the VM: project
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
/sbin/ifup enp0s8
Stdout from the command:
ERROR : [/etc/sysconfig/network-scripts/ifup-eth] Error, some other host already uses address 192.168.111.224.
Stderr from the command:
That’s a very weird error. Perhaps something failed randomly?
MR-PC:project mruttley$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'bento/centos-7.1' is up to date... ==> default: VirtualBox VM is already running.
Apparently it still created the VM. SSHing into it gives this:
MR-PC:project mruttley$ vagrant ssh [vagrant@localhost ~]$ [vagrant@localhost ~]$ ls [vagrant@localhost ~]$ [vagrant@localhost ~]$ [vagrant@localhost ~]$ logout Connection to 127.0.0.1 closed.
Bizarrely there are no files! Something still didn’t startup properly.
[vagrant@localhost ~]$ cd / [vagrant@localhost /]$ ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
At this point I was getting a bit frustrated and started to Google the error. The most relevant blog post I could find was Mike Berggren’s solution here: http://mikeberggren.com/post/100289806126/if-up. He fixed this issue and reports: “I’ll spare you the rest of the gory details but suffice it to say, we eventually circumvented that check and ran that same command from the host. It came back with another MAC address claiming ownership“. Does this mean he literally commented out the lines of code that make that check? He may have had a very different problem and I’m no dev-ops expert but perhaps there’s a better solution – maybe that check is there for a reason.
Let’s look back at that network error mentioned before:
The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! /sbin/ifup enp0s8 Stdout from the command: ERROR : [/etc/sysconfig/network-scripts/ifup-eth] Error, some other host already uses address 192.168.111.224. Stderr from the command:
Cat the vagrant file and it reveals the same IP address. This means that this particular vagrant is always assigned that IP address. If this is the only instance, how is it that something else on this virtual network is using it? Something inside my mac is conflicting with it.
MR-PC:project mruttley$ cat Vagrantfile | grep 111.224 config.vm.network :private_network, ip: "192.168.111.224"
We can check to see what’s really running (aside from what global-status and VirtualBox say) by checking running processes:
MR-PC:project mruttley$ ps aux | grep -i vbox | grep project mruttley 67692 1.0 6.0 3077812 502624 ?? S 22Mar16 87:35.54 /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless --comment project --startvm (hash) --vrde config mruttley 21971 0.6 5.5 3023580 459532 ?? S 5:22PM 1:00.31 /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless --comment project --startvm (hash) --vrde config
Aha! There are actually 2 of them. Let’s destroy the non-functioning blank VM that we created before and see if anything has changed:
MR-PC:project mruttley$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
==> default: Running cleanup tasks for 'ansible' provisioner...
==> default: Running cleanup tasks for 'hostsupdate' provisioner...Yup, it has gone:
MR-PC:project mruttley$ ps aux | grep -i vbox mruttley 67692 1.3 6.0 3077812 502640 ?? R 22Mar16 87:35.98 /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless --comment project --startvm (hash) --vrde config
Use kill -9 [pid] to remove it.
MR-PC:project mruttley$ kill -9 67692
Now let’s try recreating the VM:
MR-PC:project mruttley$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/centos-7.1'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.1' is up to date...
==> default: Setting the name of the VM: project
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Volumes/Data/Users/mruttley/Documents/code/project
==> default: Running provisioner: ansible...It works!
Conclusions:
Big thanks to Tony (http://blog.tonns.org/) for helping work this issue out!
|
|
The Mozilla Blog: Everyday Internet Users Can Stand Up for Encryption — Here’s How |
At Mozilla, we believe encryption is critical to the health of the Web. It allows us to live, work and play on a more secure Internet. Encryption helps keep the Internet exceptional.
Today, encryption is being threatened around the world. More and more governments are proposing policies that would harm user security by weakening encryption. From France to Australia to the UK, these suggested measures would thwart strong encryption for everyday Internet users. And in the U.S., the FBI was asking Apple to undermine the security of its own products.
At Mozilla, our thoughts are with the victims of recent attacks around the world. Horrific events are a moment where we must not give in to fear and weaken encryption — because encryption is a tool we all rely on every day to keep important information secure, like our financial and medical details.
The latest video in Mozilla’s public education encryption campaign explores threats to encryption around the world:
There is reason for hope — like the open Internet movement’s proven ability to take a stand and make a difference. That’s why we first started our encryption education campaign. We knew encryption would need strong, grassroots support in the coming months and years.
Now, we’re asking everyday Internet users to take an active stand. Sign our pledge to become an encryption champion standing alongside Mozilla.
By adding your name, you’re pledging to take future action to help protect encryption when it matters most. You’re joining a grassroots movement that can call policy makers, share encryption software and tips, and more, if and when necessary. We’re going to need your help with these things in the months and years ahead.
We still have time to speak up and make a difference. The power to protect strong encryption is in our hands — I hope you’ll join Mozilla and stand up for encryption today. Share our videos with your friends and join the over three million people who learned more about how encryption works, why it matters and why it’s worth protecting.
|
|
Mozilla WebDev Community: Beer and Tell – March 2016 |
Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call “Beer and Tell”.
There’s a wiki page available with a list of the presenters, as well as links to their presentation materials. There’s also a recording available courtesy of Air Mozilla.
First up was Osmose, who showed off a Rust program he “wrote” that generates a PNG of the Mandelbrot set. And by “wrote”, he means he copied it from an in-progress book on Rust called “Programming Rust” by fellow Mozillian jimb. The book uses the Mandelbrot example to illustrate how easy writing safe parallel code in Rust is. The book is available as an in-progress Early Release from O’Reilly, and is aimed towards people with prior programming experience, especially in another systems programming language.
Next was peterbe, show shared PodcastTime, a directory of over 13 years of podcast metadata that shows you how much time per day, week, and month you need to spend listening to your podcasts to keep up with them. The site also shows a calendar of upcoming and past podcasts in your list, and lets you share your list of podcasts with others.
If you’re interested in attending the next Beer and Tell, sign up for the dev-webdev@lists.mozilla.org mailing list. An email is sent out a week beforehand with connection details. You could even add yourself to the wiki and show off your side-project!
See you next month!
https://blog.mozilla.org/webdev/2016/03/30/beer-and-tell-march-2016/
|
|
Air Mozilla: Introduction to Let's Encrypt, 30 Mar 2016 |
Let's Encrypt is a new certificate authority offering free and automated certificates to everyone! Join us for an introductory presentation.
|
|
Mozilla Addons Blog: Tinkering with WebExtensions |
I’ve been writing about WebExtensions development on my blog. I’ve kept those posts over there because they’re short one-offs that I think would be too noisy for this blog and its wide audience.
That’s why I’m giving you this quick overview of what I’ve been writing so you can give them a closer look if you’re interested. The first two posts might interest you if you’re an add-on developer curious about WebExtensions. The second two are more meta, and touch on documentation, code review, and how we’re trying to shape the developer experience.
Let us know if there’s any topic around WebExtensions or other add-on development you want us to cover.
https://blog.mozilla.org/addons/2016/03/30/tinkering-with-webextensions/
|
|
Air Mozilla: Projets Laur'eats de la Fabrique des Mobilit'es |
La Fabrique des Mobilit'es s'electionne chaque ann'ee des projets sur la base de leur potentiel d'impact sur la soci'et'e et les 'economies d''energie. Ces projets...
https://air.mozilla.org/projets-laureats-de-la-fabrique-des-mobilites/
|
|
Air Mozilla: The Joy of Coding - Episode 51 |
mconley livehacks on real Firefox bugs while thinking aloud.
https://air.mozilla.org/the-joy-of-coding-episode-51-20160330/
|
|
Mozilla Addons Blog: Add-ons Update – Week of 2016/03/30 |
I post these updates every 3 weeks to inform add-on developers about the status of the review queues, add-on compatibility, and other happenings in the add-ons world.
In the past 3 weeks, 1046 add-ons were reviewed:
There are 73 listed add-ons awaiting review.
You can read about the recent improvements in the review queues here.
If you’re an add-on developer and are looking for contribution opportunities, please consider joining us. Add-on reviewers get invited to Mozilla events and earn cool gear with their work. Visit our wiki page for more information.
Most of you should have received an email from us about the future compatibility of your add-ons. You can use the compatibility tool to enter your add-on ID and get some info on what we think is the best path forward for your add-on.
To ensure long-term compatibility, we suggest you start looking into WebExtensions, or use the Add-ons SDK and try to stick to the high-level APIs. There are many XUL add-ons that require APIs that aren’t available in either of these options, which is why we’re also asking you to fill out this survey, so we know which APIs we should look into adding to WebExtensions.
The compatibility blog post is up. The bulk validation was run yesterday.
The compatibility blog post for 47 is coming soon.
As always, we recommend that you test your add-ons on Beta and Firefox Developer Edition to make sure that they continue to work correctly. End users can install the Add-on Compatibility Reporter to identify and report any add-ons that aren’t working anymore.
The wiki page on Extension Signing has information about the timeline, as well as responses to some frequently asked questions. The current plan is to remove the signing override preference in Firefox 46.
Electrolysis, also known as e10s, is the next major compatibility change coming to Firefox. Firefox will run on multiple processes now, running content code in a different process than browser code.
This is the time to test your add-ons and make sure they continue working in Firefox. We’re holding regular office hours to help you work on your add-ons, so please drop in on Tuesdays and chat with us!
https://blog.mozilla.org/addons/2016/03/30/add-ons-update-79/
|
|
Daniel Glazman: Something ridiculous in ES6 |
ES6 introduced a change in Gecko that remained under my radar for a looong time. Testing BlueGriffon 2.0 features, I discovered a feature that was completely borked and I was unable to explain it... Everything in my code looked fine. After some debugging, I nailed it into a codepen. Gecko and Chrome show the behaviour I dislike (window.bar is undefined if bar is a constant) while Safari does not.
I find this, mandatory per ES6 spec, completely ridiculous. It's not understandable from a JS author's perspective and apparently broke "a ton of stuff". This is clearly the kind of things where gurus and purists should have thought of users (JS authors) and did not.
Please TC39, change that. It's ugly and painful.
http://www.glazman.org/weblog/dotclear/index.php?post/2016/03/30/Something-ridiculous-in-ES6
|
|
Air Mozilla: SuMo Community Call 30th March 2016 |
This is the sumo weekly call We meet as a community every Wednesday 17:00 - 17:30 UTC The etherpad is here: https://public.etherpad-mozilla.org/p/sumo-2016-03-23
https://air.mozilla.org:443/sumo-community-call-30th-march-2016/
|
|
The Mozilla Blog: Firefox for iOS adds Security Features |
We’re always working to make Firefox as great as possible on all platforms. Today, we’re adding features to Firefox for iOS to protect your security.
The Firefox Password Manager securely stores and autofills your usernames and passwords across sites you visit. Firefox for iOS now lets you add a 4-digit passcode to the Password Manager to keep your information more secure while helping you browse faster without slowing down to retype login details. With this feature, if your phone somehow ends up out of your hands, your passwords have an extra layer of protection.
On all iOS devices where Touch ID is currently available, you can quickly use your fingerprint to access saved logins.
As always, when you open the latest version of Firefox for iOS, you’ll see all the other updates we’ve added to make it great.
For more information:
https://blog.mozilla.org/blog/2016/03/30/firefox-for-ios-adds-security-features/
|
|
Daniel Stenberg: decent durable defect density displayed |
Here’s an encouraging graph from our regular Coverity scans of the curl source code, showing that we’ve maintained a fairly low “defect density” over the last two years, staying way below the average density level.
Click the image to view it slightly larger.
Defect density is simply the number of found problems per 1,000 lines of code. As a little (and probably unfair) comparison, right now when curl is flat on 0, Firefox is at 0.47, c-ares at 0.12 and libssh2 at 0.21.
Coverity is still the primary static code analyzer for C code that I’m aware of. None of the flaws Coverity picked up in curl during the last two years were detected by clang-analyzer for example.
https://daniel.haxx.se/blog/2016/03/30/decent-durable-defect-density-displayed/
|
|
Mozilla Security Blog: March 2016 CA Communication |
Mozilla has sent a Communication to the Certification Authorities (CAs) who have root certificates included in Mozilla’s program. Mozilla’s CA Certificate Program governs inclusion of root certificates in Network Security Services (NSS), a set of open source libraries designed to support cross-platform development of security-enabled client and server applications. The NSS root certificate store is not only used in Mozilla products such as the Firefox browser, but is also used by other companies and open-source projects in a variety of applications.
The CA Communication has been emailed to the Primary Point of Contact (POC) for each CA in Mozilla’s program, and they have been asked to respond to 7 action items:
The full action items can be read here. Responses to the survey will be automatically and immediately published using Salesforce.
With this CA Communication, we re-iterate that participation in Mozilla’s CA Certificate Program is at our sole discretion, and we will take whatever steps are necessary to keep our users safe. Nevertheless, we believe that the best approach to safeguard that security is to work with CAs as partners, to foster open and frank communication, and to be diligent in looking for ways to improve.
https://blog.mozilla.org/security/2016/03/29/march-2016-ca-communication/
|
|
Mitchell Baker: Co-Chairing the US Commerce Department’s Digital Economy Advisory Board |
|
|
The Mozilla Blog: Co-Chairing the US Commerce Department’s Digital Economy Advisory Board |
The U.S. Department of Commerce has just created a Board of Advisors for topics related to the Digital Economy. I will participate as one of the two co-chairs, along with Zo"e Baird, President and CEO of the Markle Foundation. The Digital Economy Board of Advisors is to provide regular advice to the Secretary of Commerce from leaders in industry, academia, and civil society on the Department’s new Digital Economy Agenda. The Agenda is focused on advancing the Internet and the digital economy across many frontiers, including promoting innovation, a free and open Internet, trust online, and Internet access for all Americans.
The Board of Advisors has been charged with taking a broad, strategic look at the digital economy, including how best to promote innovation and development of new technologies, and the impact of Internet policy issues such as cybersecurity and privacy on the digital economy. I expect the the Board of Advisors will consider whether, when, and how the U.S. government should take direct regulatory and policy action, and when not to do so. The Department of Commerce has a key leadership role within the U.S. government on these issues.
Read more about the Commerce Department’s Digital Agenda here and see the Advisory Board’s announced appointments here.
|
|
Air Mozilla: Martes mozilleros, 29 Mar 2016 |
Reuni'on bi-semanal para hablar sobre el estado de Mozilla, la comunidad y sus proyectos. Bi-weekly meeting to talk (in Spanish) about Mozilla status, community and...
|
|
David Lawrence: Happy BMO Push Day! |
the following changes have been pushed to bugzilla.mozilla.org:
discuss these changes on mozilla.tools.bmo.
https://dlawrence.wordpress.com/2016/03/29/happy-bmo-push-day-11/
|
|
Daniel Stenberg: A thousand curl forks |

The curl repository on github has now been forked 1,000 times. Or actually, there are 1,000 forks kept alive as the counter is actually decreased when people remove their forks again. curl has had its primary git repository on github since March 22, 2010. A little more than two days between every newly created fork.
If you’re not used to the github model: a fork is typically made to get yourself your own copy of someone’s source tree so that you can make changes to that and publish your own version of the source tree without having to get the changes you’ve done merged into the original repository that you forked off from. But it is also the most common way to offer changes back to github based projects: send a request that a particular change in your version of the source tree should get merged into the mother project. A so called Pull Request.
Trivia: The term “fork” when meaning “to divide in branches, go separate ways” has been used in the English language since the 14th century.
I’m only aware of one actual separate line of development that is a true fork of libcurl that I believe is still being maintained: libgnurl.
https://daniel.haxx.se/blog/2016/03/29/a-thousand-curl-forks/
|
|