A major new release of Homebrew has landed and now includes support for Linux as well as Windows! via the Windows Subsystem for Linux. There are overall stability and speed improvements baked in as well. The aforelinked notification has all the info you need to see the minutiae. Unless you’ve been super-lax in updating,
brew update will get you the latest release.
There are extra formulae analytics endpoints and the
homebrewanalytics R package has been updated to handle them. A change worth noting in the package is that all the API calls are memoised to avoid hammering the Homebrew servers (though the “API” is really just file endpoints and they aren’t big files but bandwidth is bandwidth). Use the facilities in the
memoise package to invalidate the cache if you have long running scripts.
Use your favorite social coding site to install it (If I don’t maintain mirrors on your open social coding platform of choice just drop a note in the comments and I’ll start mirroring there as well):
devtools::install_git("https://git.sr.ht/~hrbrmstr/homebrewanalytics") # or devtools::install_gitlab("hrbrmstr/homebrewanalytics") # or devtools::install_github("hrbrmstr/homebrewanalytics")
The README and in-package manual pages provide basic examples of retrieving data. But we can improve upon those here, such as finding out the dependency distribution of Homebrew formulae:
library(hrbrthemes) library(homebrewanalytics) # git.sr.hr/~hrbrmstr ; git[la|hu]b/hrbrmstr library(tidyverse) f <- brew_formulae() mutate(f, n_dependencies = lengths(build_dependencies)) %>% count(n_dependencies) %>% mutate(n_dependencies = factor(n_dependencies)) %>% ggplot() + geom_col(aes(n_dependencies, n), fill = ft_cols$slate, width = 0.65) + scale_y_comma("# formulae") + labs( x = "# Dependencies", title = "Dependency distribution for Homebrew formulae" ) + theme_ft_rc(grid="Y")
Given how long it sometimes takes to upgrade my various Homebrew installations I was surprised to see
0 be so prevalent, but one of the major changes in 2.0.0 is going to be more binary installs (unless you really need custom builds) so that is likely part of my experience, especially with the formulae I need to support cybersecurity and spatial operations.
We can also see which formuale are in the top 50%:
unlist(f$dependencies) %>% table(dnn = "library") %>% broom::tidy() %>% arrange(desc(n)) %>% mutate(pct = n/sum(n), cpct = cumsum(pct)) %>% filter(cpct <= 0.5) %>% mutate(pct = scales::percent(pct)) %>% mutate(library = factor(library, levels = rev(library))) %>% ggplot(aes(n, library)) + geom_segment(aes(xend=0, yend=library), color = ft_cols$slate, size=3.5) + geom_text( aes(x = (n+max(n)*0.005), label = sprintf("%s (%s)", n, pct)), hjust = 0, size = 3, family = font_rc, color = ft_cols$gray ) + scale_x_comma(position = "top", limits=c(0, 500)) + labs( x = "# package using the library", y = NULL, title = "Top 50% of libraries used across Homebrew formulae" ) + theme_ft_rc(grid="X") + theme(axis.text.y = element_text(family = "mono"))
openssl is pretty popular (not surprising but always good to see cybersecurity things at the top of good lists for a change)! macOS ships with an even more dreadful (I know that’s hard to imagine) default Python setup than usual so it being number 2 is not unexpected.
And, finally, we can also check on how frequently formulae are installed. Let’s look back on the last 90 days:
ggplot() + geom_density( aes(x = installs$count, y = stat(count)), color = ft_cols$slate, fill = alpha(ft_cols$slate, 1/2) ) + scale_x_comma("# install events", trans = "log10") + scale_y_comma("# formulae") + labs( title = "Homebrew Formulate 'Install Events' Distribution (Past 90 days)" ) + theme_ft_rc(grid="XY")
I’ll let you play with the package to find out who the heavy hitters are and explore more about the Homebrew ecosystem.
Kick the tyres. File issues & PRs and a hearty “Welcome!” to the Homebrew ecosystem for Linux and Windows users. My hope is that the WSL availability will eventually make it easier to develop for Windows systems and avoid the “download the kinda sketchy compiled windows libraries from github on package install” practice we have today.
If you crank out some analytics using the packages don’t forget to blog about it and drop a link in the comments!