What has been said above is sadly true. Apple goes out of their way to make it extremely difficult to install another OS on their hardware.
Sometimes with much effort your WiFi can be made to work. You can try the following steps and perhaps you may get lucky.
The following is a complicated procedure, but it may be your only hope for getting your WiFi to work.
If there is more than one AP in your vicinity (or you have a dual-band AP with a single SSID) this can result in dropped connections.
Your connection can be lost because of constant scanning by Network Manager, and confusion over which AP to connect with.
To eliminate this possibility you can lock your WiFi connection profile to the BSSID of your favored access point in Network Manager.
You can do this in Network Manager's "Wi-Fi" tab in your connection's properties settings.
There is a "BSSID" drop down field where you can select and lock your Wi-Fi to a single BSSID.
To automatically add new kernel boot parameters issue these commands:
sudo cp /etc/default/grub /etc/default/grub.bak && sudo sed '/^GRUB_CMDLINE_LINUX_DEFAULT=/s/"$/ ipv6.disable=1 ifnames=0"/g' -i /etc/default/grub && sudo update-grub
After grub has finished updating proceed to the next step.
Disable Network Manager's WiFi power saving features with the following command:
echo -e "[connection]\nwifi.powersave = 0" | sudo tee /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
Then, disable MAC Address Randomization in Network Manager with the following command:
echo -e "[device]\nwifi.scan-rand-mac-address=no" | sudo tee /etc/NetworkManager/conf.d/disable-random-mac.conf
After creating the new conf file, reboot both your router and your computer.
After restarting, test your connectivity. If there is no improvement follow on to the next steps.
It is very possible your modules are having issues with the order they are loaded at boot. Both the tg3 Ethernet module and Bluetooth can conflict with your WiFi when they are loaded first.
Therefore we are going to blacklist all broadcom modules and Bluetooth at boot.
With your favorite text editor create the following configuration file:
Paste the following into the new conf file:
Save the file and then reboot.
After rebooting you will need to manually modprobe your wifi, ethernet, and bluetooth modules (if you want to use all of them).
After creating the blacklist file your WiFi driver will not autoload at boot without modprobing.
First, load the wl driver manually via modprobing:
sudo systemctl stop NetworkManager; sudo rfkill unblock wifi; sudo modprobe wl; sudo ip link set wlan0 mode default; sudo ip link set wlan0 up; sudo systemctl start NetworkManager
Then test your connectivity for improvement with the wl driver, and if there is none reboot.
After rebooting this time test the b43 driver via modprobing with:
sudo systemctl stop NetworkManager; sudo rfkill unblock wifi; sudo modprobe b43; sudo ip link set wlan0 mode default; sudo ip link set wlan0 up; sudo systemctl start NetworkManager
If either of those drivers work then the wl or b43 driver can be loaded automatically via a service at boot.
If you need to use either Bluetooth or your LAN connection they can be modprobed in this order (after your wifi).
sudo modprobe btusb
sudo modprobe tg3
The LAN and Bluetooth modules can also be loaded after your WiFi driver in a service if they are required.
If this procedure works I can show you how to write a service to load the modules in the correct order.
The broadcom wl (or b43) driver can be made to load automatically after start up with a service.
Create the following service file with your favorite text editor:
Add the following contents to the service file:
#sudo systemctl enable broadcom.service
#sudo systemctl start broadcom.service
#sudo systemctl status broadcom.service
#sudo systemctl stop broadcom.service
#sudo systemctl disable broadcom.service
Description=Load broadcom wifi module after start up
ExecStart=/usr/bin/systemctl stop NetworkManager
ExecStart=/usr/bin/rfkill unblock wifi
ExecStart=/usr/bin/ip link set wlan0 mode default
ExecStart=/usr/bin/ip link set wlan0 up
ExecStart=/usr/bin/systemctl start NetworkManager
Remove the pound signs (#) from these entries if you wish to load the LAN & BT modules.
Save the service file, and then enable the service with the following command:
sudo systemctl enable broadcom.service
Reboot and test the results.
If you find the b43 driver works better with your adapter, then simply substitute b43 in place of wl in the service to load the b43 module.