SSH and rsync for remote editing work just fine from an rMBP.
Don't bother trying to connect an external monitor with a different DPI though, hehe. I've heard that problem is unsolvable with the X11 paradigm but will be fixed in Wayland (whatever that is).
Someone said proper HiDPI support is not available on Linux. So I replied that I have used HiDPI on Linux for a long time without major issues.
That's not an advocacy argument for anyone to choose Linux. So I might ask you to re-read my paragraph—unless you're so allergic to Linux "bullshit" that mere anecdotes cause you pain, in which case I'm sorry. (That's meant to be just slightly condescending...)
It's bullshit to you, but it doesn't make Linux bullshit - others prioritise different aspects.
You care about HiDPI - perhaps you are a designer, so it's important. But, you're not everyone. For example, I have no need for HiDPI and I personally have much more focus on the power and control Linux gives me. I wouldn't want HiDPI if I had to give up a proper Window Manager.
Your choice is fair enough, but it's no more than a personal preference.
I haven't met a single person that didn't immediately appreciate the benefits of HiDPI when they saw it.
Oh, and higher DPI cures cancer.
This is exactly what I'm talking about. I just want to get work done in a sane way. Linux is insane to any normal human being.
There are indeed a lot of Linux enthusiasts here, myself included, but being a Linux enthusiast doesn't mean we all want to act as systems integrator all the time.
I happen to see a lot of value in the availability of a free and open operating system, so I take offense when people rail against it in this sweeping way. Yeah, it's not polished perfect like Apple's products (let's imagine that they don't have any tedious bullshit problems), but it's free software and a community effort.
So when people say it's "insane for any normal human being" to use it... eh, that pushes my buttons.
If you install Postgres, you have to mess around with some configuration files. Some people might consider that tedious, painful, horrible bullshit. I just see it as a necessary reality, and I don't whine condescendingly at people who offer advice or anecdotes.
I live in the command line and use a modern toolchain. Package management has no bearing on my development. mvn, npm, composer, gem, and pip all work just fine. Home brew gets you the OS packages and I've yet to run into an even remotely popular package not in a Homebrew repo somewhere.
On top of all that- with Vagrant and (or even just) Virtualbox you have whatever flavor of Linux you want running on your desktop.
I have found OSX to be the best combination of just works enough OS with all the command line power I need. I can't effing stand Windows anymore and all the Linux desktop distros, though may have some appealing niche characteristics over OS X, there are way more rough edges. I could see one day leaving OS X for a Linux distro, but it won't be any time soon.
Can we not do that?
Various utility scripts need to be written more defensively to run correctly in OS X with its ancient shell and BSD tools.
Overall it's just not worth the hassle, particularly when you need to ramp up new developer machines in minimal time.
I could definitely see how clang would screw things up. I don't have experience as a C/C++ developer in OS X for anything other than personal electronics projects.
My personal and professional experience with significant development time in Java, PHP, Python, and Node has been that only Linux could do it as well, but the trade offs for daily desktop use simply aren't worth it. Being able to pump my development environments into a VM of the same flavor as the target environment has given me the best of all worlds. But I've genuinely never run into anything that just refused to work on OSX. I will say that Python and Python env are sometimes a PITA, but not any constant issues.
When you're building for a managed runtime it's fine. When you're building native code not so much.
Developing native code means writing code, reading code and documentation, and interacting with the build system / debugger. Those tasks need to happen directly on the developer's workstation, but not the actual building and execution/testing of that native code.
This is better done in an environment with known state, i.e. either an isolated local or remote VM that will have the environment set up as required for production, and likely multiple different, incompatible environments, or some external hardware for many use cases of native code. Best practices and a modern toolchain would imply things like reproducible builds which you can't really have if you're building and running C or C++ code directly with whatever setup and libraries each developer has on their own workstation, no matter if they're on linux, windows or mac.
...for you.
¹) The differences between various package management systems are not significant in this context.
"Homebrew failed to do thing...here's exactly the commands you can run to make this thing work now though if you are so inclined."
apt fails? Good luck
Home brew, when things go wrong, goes wrong disastrously in my experience. You're never quite sure where you're left, and you have to spend a fair bit of time picking through what actually failed.
By the way, aptitude does not really help you in the typical error case: a package (continuously) fails in dpkg-reconfigure, which causes the complete install/upgrade to fail.
I actually see this as an argument in favour of OSX, as it is much more straightforward to change package manager than on Linux, where the sane way to change package manager is to change your distribution.
It's actually better, for three reasons:
- If a library is not in Homebrew (which happens frequently when you are a developer ;)), you just install it into /usr/local/Cellar/<name>/<version> and you can use all the regular Homebrew tools (brew link <name>, brew unlink <name>), etc.
- It's much easier to build and distribute your own stuff in Homebrew, by providing a repository of formulae. I have packaged both Debian packages (distributed via Launchpad's PPA) and created Homebrew formulae. Packaging for Homebrew is much easier.
- Homebrew is packaging is decoupled from OS packaging/updates. This means that you can update a new application without having to upgrade half of your system. In Linux, you usually have the choice of: stable OS, outdated software. Up to date software, in-flux OS.
I've never seen an application on Linux asking to update half of my system libraries or something. Please stop using hyperbole, this is not useful for the sake of conversation.
On top of that, you can install recent software in many ways (OpenSUSE has specific, updated repositories that can be triggered with one-click on their website, Ubuntu has pretty much the same thing with PPAs) or you can even build everything from source on Arch with AUR and just ensure you have updated libraries as required (which is not half of your system).
And if you don't want to update ANY of your system libraries, it's fairly straightforward symlink local versions of libraries instead of system ones.
Homebrew frequently requires you to manually perform steps or edit files. While it might not be directly homebrews fault, that 100% disqualifies it for the label "It's actually better".
My favorite is actually Nix/Guix but I haven't bothered to set it up on my daily driver.
- you have way more packages on any Linux package manager.
- Linux package managers do not mess with /usr/local as expected in a UNIX compatible OS. Homebrew does. Linux package managers run as root, not in user-space.
- Apparently Homebrew gets broken by Apple software/OS updates.
- Linux package managers are an integral part of the OS environment and update process - it's structured this way even for critical system and kernel patches.
- Aptitude, for example, gets rid of older versions of packages, while Homebrew keeps all previous versions and simply changes the symlink. Cleanup is also automated in Linux package managers, not Homebrew as far as I know.
- Homebrew sometimes pulls up sources to compile software locally, while Linux distros usually pull up binaries (except AUR on Arch or Portage on Gentoo, or Sbopkg on Slackware). While compiling from source is nothing wrong, it can take a lot of time depending on what you are building.
And Homebrew tends to be more up to date then most distribution repositories. Especially if I want to have a stable OS.
Linux package managers do not mess with /usr/local as expected in a UNIX compatible OS. Homebrew does.
You can install Homebrew in another directory, it works fine.
Linux package managers are an integral part of the OS environment and update process
Which is bad. Application updates are typically tied to base system package updates. Either you use some stable branch (like Debian) stable and you are stuck with old software. Or you use some rolling release, but then your kernel, X11, Gtk+, or whatever could break.
Decoupling the installation of applications from the base operating system is a good thing.
- Aptitude, for example, gets rid of older versions of packages, while Homebrew keeps all previous versions and simply changes the symlink.
brew cleanup
...and old versions are removed and downloads are cleared. Also, you can add the --cleanup flag to upgrade and it will remove old versions. I prefer Homebrew's approach here, because it's easier to rollback.While compiling from source is nothing wrong, it can take a lot of time depending on what you are building.
Luckily, Homebrew bottles most software that has long compile times. I have a MacBook with a Core M processor and install times have never been a problem (and I have installed Boost, Rust, and ghc, to name just a few larger things).
How is that a good thing if an application needs some core OS features that are not available in its current state? Newer libraries become available for all software and benefit from the upgrades. And yeah, sometimes some things break, but it's easy enough to roll back to a previous library version if you need to, instead of bloating the system with multiple versions of different libraries.
> You can install Homebrew in another directory, it works fine.
But it's not its default. How many users change its directory ?
> And Homebrew tends to be more up to date then most distribution repositories. Especially if I want to have a stable OS.
Honestly you can't compete with AUR (Arch) on that level.
However...what specifically are you wanting to install and update on Mac that a better package manager would significantly help with? I find on Mac I'm rarely installing or updating new packages so it doesn't bother me as much as I thought it would. As long as I can easily install and update Python, Node, Vagrant, Chrome and a few other things I'm happy.
I'd love a laptop that had a long life battery, good screen, good build, was light, ran an open source OS that supported all the software I need etc. but you have to compromise unfortunately and I can compromise on package management.
Being broken is a feature? Changing /usr/local instead of being sane? Leaving old versions of packages lying about instead of cleaning them up? Breaking when the Apple devs wonder if it would be fun to switch things up a bit under the hood without telling anyone?
The one thing I can think of that's a "feature" is that brew compiles locally, instead of pulling down a binary, but even that has some draw backs.
I'm all for product loyalty, but a spade's a spade.
Sometimes older versions of different packages may be dependencies of newer packages. This is a thing that happens with software. When it's not a problem, `brew cleanup` gets rid of old versions.
Most of the time brew does install binaries, they're called Bottles. When it can't find a binary, it compiles locally. Yes this is sometimes annoying but it's not a deal breaker, at least not for me.
I'm not sure what you mean by "Breaking when the Apple devs wonder if it would be fun to switch things up a bit under the hood without telling anyone." This has never happened to me or anyone I know and furthermore Brew is a Unix compliant tool and OS X is a SUS compliant operating system.
Sorry if I'm sounding harsh, it just sounds a little like you're a Linux user who doesn't or possibly hasn't ever used OS X. Brew is not a panacea but it's honestly pretty good. There's also MacPorts if you're used to more old-style tools and a couple other package managers as well. You can even use Nix on OS X.
Better than most OS X programs, which seem to have paths like /Applications/Something.app/Contents/Resources/SomethingElse.app/Contents/Developer/Frameworks/Resources/Something.dylib/Contents/Resources/MacOS/Resources/Frameworks/Something.dylib/Contents/Developer
Case in point, an excerpt from the program Lipo's usage text:
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo [input_file]
Not everyone is writing POSIX only code.
UNIX having a cli doesn't do anything to help us.