Ubuntu 18.10 on Macbook Pro 2018

Nah, it's not a joke

Unfortunately, I was forced to use MBP at work. It's easy to imagine how exciting it was for someone who been using Linux happily for the last 12 years. I don't mind that many people are using it and think they're happy and somehow productive but I do take it personally when the operating system or hardware manufacturer significantly disrupt my productive habits and enforces behaviour which slows me down without giving anything back in return

Being openminded I was trying to use it for a few days, I even promised that won't yell in the office annoying my colleagues(but broke promise after few minutes)

Eventually, after 4 days I decided to install the fresh Ubuntu 18.10 instead of this inadequate but nice looking OS and get the classic keyboard with all keys. One might be surprised but I heavily use F-keys and not only for the software development. I see zero reasons why would I add additional keystrokes making typing process more like playing the piano to achieve something I don't need.

TR;DR;

Don't waste your time installing Ubuntu on MBP 2018, at least anytime soon

But if you have some time...

I mean if you want to play with different kernels, like in 2000 it might be entertaining. Nevertheless, I have reminded you.

There are many bug reports, like this, basically, something got broken in the kernel starting from ~ 4.16 or so

At the moment I'm using kernel 4.15.0-1030-oem - the only one pre-4.17 version I was able to find in the repository. Don't try 4.18 & 4.19 - a bug is still there.

So what does not work with 4.15.0-1030-oem?

  • Keyboard
  • Touchpad
  • WiFi - sees networks but can't connect
  • Bluetooth - it works sometimes, needs to repair after each restart
  • Microphone
  • Touchbar

The best you can do is to get many USB-hubs and plug external devices in there, at the moment I've got 6 things connected to the computer. Forget about portability, from now on - it's a glossy, expensive, loud and thin desktop computer with a built-in display.

General performance

It works really fine. i7-7700HQ CPU @ 2.80GHz processor is just slightly faster than my 3 years old i7-4770 @ 2.2GHz when it comes to building jvm applications. Noteworthy, the build time on MacOS is the same as on Linux, no performance loss in this place.

I thought something wrong with how Linux manages power settings but apparently, it's a design issue of MBP 15" 2018. After a few minutes of build fans kick off and the laptop is about to start levitating.

Graphics output is accelerated but I didn't manage to install the AMD driver, didn't really try much since opensource one works fine for me, I'm not playing games anyway.

Observations about MacOS

Really pretty-looking operating system with absolutely nonsense (for me) shortcuts which are very different from what PC user would expect as well as lack of very common tools I'd expect to have. Also, I found it's not secure considering real-world use cases.

People have to use homebrew because Apple doesn't supply most of the development tools. Apparently, no one cares about the fact that homebrew is developed by one person and no one is able to check what is being installed. To be honest - this is becoming common in the Linux world(hello, snap packages).

As per UX, I found it irritated. Just a few questions to someone who isn't using MacBook

  • You've got a zip archive. Would you expect to unzip it in-place after the double click? I would not.
  • You're in the file manager[finder]. What do you expect when hit "Enter" key? I definitely don't expect rename
  • (see above and try to guess how to enter the subdirectory)
  • Windows aren't snapping. Hello, it's 2019!
  • By default, the file manager hides hidden files. Even if you enforce to show "all hidden files" all files still won't be shown. Go to the terminal instead...
  • The fastest "repeat delay" and "delay until repeat" settings are awful. The "fastest" speed annoys me. It is possible to increase speed, via command line again.
  • You won't find a built-in way to access the calendar.
  • Since they gave up a lot of buttons for "shit" emojis there is no end/home keys. They're working as PgUp/PgDown. Sure, it's always possible to push one more modifier button.
  • Did you see the delete button? Well, it's actually backspace. To make it work as a delete you have to hold another modifier button. Don't worry - you favourite button Cups Lock is still there and take as much space as whole arrow block.

What did you say about "everything works from the box" and "Linux requires initial setup"?

You might find it useful

More information from command line tools:

➜  ~ glxinfo | grep -i "vendor\|rendering\|amd"
direct rendering: Yes
server glx vendor string: SGI
client glx vendor string: Mesa Project and SGI
    Vendor: X.Org (0x1002)
    Device: AMD Radeon (TM) RX Graphics (POLARIS11, DRM 3.23.0, 4.15.0-1030-oem, LLVM 7.0.0) (0x67ef)
OpenGL vendor string: X.Org
OpenGL renderer string: AMD Radeon (TM) RX Graphics (POLARIS11, DRM 3.23.0, 4.15.0-1030-oem, LLVM 7.0.0)
    GL_AMD_conservative_depth, GL_AMD_draw_buffers_blend, 
    GL_AMD_performance_monitor, GL_AMD_pinned_memory, 
    GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_stencil_export, 
    GL_AMD_shader_trinary_minmax, GL_AMD_vertex_shader_layer, 
    GL_AMD_vertex_shader_viewport_index, GL_ANGLE_texture_compression_dxt3, 
    GL_AMD_conservative_depth, GL_AMD_draw_buffers_blend, 
    GL_AMD_performance_monitor, GL_AMD_pinned_memory, 
    GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_stencil_export, 
    GL_AMD_shader_trinary_minmax, GL_AMD_vertex_shader_layer, 
    GL_AMD_vertex_shader_viewport_index, GL_ANGLE_texture_compression_dxt3, 
    GL_AMD_performance_monitor, GL_ANDROID_extension_pack_es31a, 

One can find output of lsusb useful:

➜  ~ lspci 
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 05)
00:01.1 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) (rev 05)
00:01.2 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4) (rev 05)
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:15.0 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO I2C Controller #0 (rev 31)
00:16.0 Communication controller: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 (rev 31)
00:19.0 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO UART Controller #2 (rev 31)
00:1b.0 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #17 (rev f1)
00:1c.0 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #1 (rev f1)
00:1e.0 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO UART #0 (rev 31)
00:1e.1 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO UART #1 (rev 31)
00:1e.2 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO GSPI #0 (rev 31)
00:1e.3 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO GSPI #1 (rev 31)
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-H LPC Controller (rev 31)
00:1f.2 Memory controller: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller (rev 31)
00:1f.3 Audio device: Intel Corporation 100 Series/C230 Series Chipset Family HD Audio Controller (rev 31)
00:1f.4 SMBus: Intel Corporation 100 Series/C230 Series Chipset Family SMBus (rev 31)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Baffin [Radeon RX 460/560D / Pro 450/455/460/555/560] (rev c7)
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Device aae0
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM961/PM961
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC (rev 02)
04:00.0 PCI bridge: Intel Corporation DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015] (rev 02)
05:00.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
05:01.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
05:02.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
05:04.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
06:00.0 System peripheral: Intel Corporation JHL6540 Thunderbolt 3 NHI (C step) [Alpine Ridge 4C 2016] (rev 02)
07:00.0 USB controller: Intel Corporation JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine Ridge 4C 2016] (rev 02)
7a:00.0 PCI bridge: Intel Corporation DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015] (rev 02)
7b:00.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
7b:01.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
7b:02.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
7b:04.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
7c:00.0 System peripheral: Intel Corporation JHL6540 Thunderbolt 3 NHI (C step) [Alpine Ridge 4C 2016] (rev 02)
7d:00.0 USB controller: Intel Corporation JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine Ridge 4C 2016] (rev 02)

And yes, MacOS not only doesn't recognize ext4 but also afraid of touching it:

Good luck folks, keep calm