WEBVTT

00:00:00.080 --> 00:00:06.240
anyone who's used Windows especially older versions is probably familiar with

00:00:04.080 --> 00:00:09.920
the dreaded dll error when you're in the middle of trying to do something

00:00:07.839 --> 00:00:13.440
although dll files seem to be important given how much Windows complains when

00:00:11.519 --> 00:00:18.720
one is broken or missing it's not exactly obvious what they are so let's

00:00:15.759 --> 00:00:22.720
explain why they're a big deal dll stands for dynamic link library but

00:00:21.199 --> 00:00:27.680
don't mistake them for a collection of zelda nfts the reason they're called

00:00:25.039 --> 00:00:32.559
libraries is that dlls contain shared code that multiple programs can link to

00:00:30.160 --> 00:00:35.760
and use kind of like how real libraries contain shared books that many people

00:00:34.640 --> 00:00:40.559
can borrow but dlls have an important feature that

00:00:37.840 --> 00:00:46.320
books don't several programs can use one dll at the same time and once a dll is

00:00:43.760 --> 00:00:50.640
loaded into a certain space in memory any program that needs the code inside

00:00:48.239 --> 00:00:54.480
can request access to that memory space without the dll having to be loaded over

00:00:52.879 --> 00:00:58.879
and over again a good simple example of this is this

00:00:57.039 --> 00:01:03.199
dll file which contains the code for bringing up a Windows popup dialog box

00:01:01.600 --> 00:01:07.680
since so many programs use this functionality it makes sense for this

00:01:05.119 --> 00:01:11.840
code to be included in Windows as a dll instead of writing it into every program

00:01:09.520 --> 00:01:15.600
from scratch another good example is the device driver which is the code that

00:01:13.680 --> 00:01:19.920
allows Windows and other programs to communicate properly with hardware

00:01:17.600 --> 00:01:23.680
drivers often take the form of dlls though they can appear as dot sys files

00:01:21.840 --> 00:01:29.680
in Windows explorer which allows multiple applications to access your GPU

00:01:26.640 --> 00:01:32.240
keyboard or printer its drivers at a

00:01:29.680 --> 00:01:36.000
time and because dlls are only loaded up when a program specifically asks for

00:01:34.159 --> 00:01:40.880
them instead of every time the program starts they also prevent your RAM from

00:01:38.320 --> 00:01:44.799
filling up with tons of unnecessary code this modularity means that new

00:01:42.560 --> 00:01:48.960
functionality such as game updates or support for different languages can be

00:01:46.640 --> 00:01:53.360
added to older programs simply by writing new dlls rather than having to

00:01:51.200 --> 00:01:57.119
modify the program itself that's not only more convenient but you don't run

00:01:55.200 --> 00:02:01.200
the risk of inadvertently breaking the code of the main executable but if dlls

00:01:59.439 --> 00:02:06.320
are such a good idea why are they so notorious for creating problems often

00:02:03.759 --> 00:02:09.759
referred to as dll hell we'll tell you right after we thank

00:02:07.759 --> 00:02:13.520
freshbooks for sponsoring this episode freshbooks is an easy to use software

00:02:11.599 --> 00:02:17.040
built for freelancers and small business owners who don't want to have to waste

00:02:14.959 --> 00:02:20.560
time on invoicing accounting and payment processing freshbooks users can

00:02:18.800 --> 00:02:24.080
streamline and automate tasks like invoice follow-up and expense tracking

00:02:22.480 --> 00:02:28.000
with features like their new digital bills and receipt scanner and with

00:02:26.319 --> 00:02:31.680
freshbooks's intuitive dashboard and reports it's easy to see at a glance

00:02:29.920 --> 00:02:35.360
exactly where your business stands and turn everything over to your account

00:02:33.200 --> 00:02:39.280
income tax season try freshbooks for free for 30 days with no credit card

00:02:37.200 --> 00:02:43.280
required at freshbooks.com techquickie so one big reason dlls cause

00:02:41.840 --> 00:02:47.840
problems is that when an application depends on lots of dlls it also means

00:02:46.080 --> 00:02:53.120
that application has many possible points of failure if a dll gets modified

00:02:50.800 --> 00:02:57.360
there's no way for a program that loads up the dll to ensure that the new code

00:02:55.360 --> 00:03:02.400
is compatible and if it isn't the program you want will often simply crash

00:03:00.160 --> 00:03:06.480
you see some programs will go messing around with dlls in a way that they

00:03:04.159 --> 00:03:11.360
shouldn't an installer for example may decide to modify a dll in a way that

00:03:08.720 --> 00:03:16.480
helps that specific application but can cause errors in the possibly many other

00:03:14.000 --> 00:03:18.800
programs that need the same dll but aren't compatible with the modified

00:03:17.920 --> 00:03:24.959
version for a long time microsoft expected third-party software developers to

00:03:22.480 --> 00:03:28.159
verify that any dlls they installed especially if they overrode existing

00:03:26.560 --> 00:03:31.920
ones would comply with accepted standards but needless to say with

00:03:30.480 --> 00:03:36.319
developers typically more concerned about making sure their own software

00:03:33.760 --> 00:03:40.480
works it often simply didn't happen and programs kept installing troublesome

00:03:38.080 --> 00:03:43.680
dlls with impunity mercifully this problem has been mitigated to a large

00:03:42.159 --> 00:03:48.879
extent in more recent versions of Windows microsoft has locked down system

00:03:46.640 --> 00:03:52.400
dlls so that third-party applications can't mess with them unless they've

00:03:50.400 --> 00:03:57.040
actually been authorized by microsoft itself Windows can now also track dll

00:03:55.200 --> 00:04:01.360
installations to try to prevent unknown dlls from making their way onto the

00:03:58.720 --> 00:04:05.680
system as well as to allow two different versions of a dll to exist

00:04:03.040 --> 00:04:10.319
simultaneously to prevent programs that rely on an older revision from breaking

00:04:08.159 --> 00:04:15.040
when you add a new one and with modern pcs having a lot more memory than the

00:04:12.400 --> 00:04:19.120
computers of the 90s and early 2000s the memory limitations that necessitated

00:04:16.959 --> 00:04:24.000
dlls in the past aren't as prevalent today meaning that modern programs often

00:04:21.120 --> 00:04:27.600
don't rely on dlls nearly as much maybe stuffing 64 gigs of RAM in your

00:04:25.919 --> 00:04:33.120
personal rig wasn't such a big mistake after all but you know what is a mistake

00:04:30.479 --> 00:04:35.600
not liking this video and subscribing so do it
