#The Flopperating System (tfos) - x86 32 bit Hobby OS
1 messages · Page 6 of 1
2mb debug stack
It’s only 109 😔
Funny ass meme
I love this meme format
I should make an OSdev meme comp
Yeah that’s the reason fr
truly
Why
Nah having code to setup the gdt values is useless when you can just hardcode them
Absolutely
I guess
kill runtime segment desc initialization
my gdt implementation is a u64 array
my TSS lower descriptor calculation is obscene
@bold grove star4star
couldnt star the actual repo tho im not logged into gh
No worries
Okay
Should I just statically make it
At compile time
With some static struct
static u64
.. the fuck is this
What font is that
TamzenForPowerline
basically tamsyn but with modern glyphs
best font ever is VGA 
Yes
Totally agree deadass
I used vga text mode for so damn long it’s not even funny
I only got Flanterm in April
And I created my os in October
Damn it’s almost a year old
Fuck
WAIT
YOURE THR GIY who MADE MEOWIX RIGHT
donda 3 is gonna drop on floppaOS 1 year anniversary 
never posted about it
I made meow
meowix is new
Yessir free Palestine!
Are you Turkish
Imma add a free Palestine message in my os
Oh no
Guys I added pc speaker
LMAO
i can now play cancer
Do you have a progress thread
If so I’ll like it and you should like mine :)
meow is 1yr old and abandoned, the new thing which is named meowix doesn’t have a progress thread as I decided to create it once I get to userspace
I already did like yours
Okay please let me know when you do post it
I’m super interest
What if we kissed within an unsafe { } block
while matching an enum
Yessir
20 stars broooo
So happy
Literally so happy
I will redo my GDT tho
And statically do it
Hard code
Yes I’m doing it rn
#include <stdint.h>
#include "gdt.h"
#include "../lib/logging.h"
static const gdt_descriptor_t our_gdt[] = {
{ 0, 0, 0, 0, 0, 0 },
{ 0xFFFF, 0x0000, 0x00, 0x9A, 0xCF, 0x00 },
{ 0xFFFF, 0x0000, 0x00, 0x92, 0xCF, 0x00 }
};
static const struct __attribute__((packed)) {
uint16_t limit;
uint32_t base;
} gdt_reg = {
sizeof(our_gdt) - 1,
(uint32_t)our_gdt
};
void gdt_init() {
log("gdt init - start\n", GREEN);
__asm__ volatile (
"lgdt %0\n"
"mov $0x10, %%ax\n"
"mov %%ax, %%ds\n"
"mov %%ax, %%es\n"
"mov %%ax, %%fs\n"
"mov %%ax, %%gs\n"
"mov %%ax, %%ss\n"
"jmp $0x08, $.flush\n"
".flush:\n"
:
: "m"(gdt_reg)
: "eax"
);
log("gdt init - ok\n", GREEN);
}
So easy
you’re semi chad now
What do I do to be gigachad
real ones use hard coded 64bit entries in integer format
just u64 table[ENTRIES_NUM]
and dont use inline assembly
😎
that too
static const uint64_t our_gdt[] = {
0x0000000000000000ULL,
0x00AF9A000000FFFFULL,
0x00AF92000000FFFFULL
};
```??
Like that
magic numbers look odd but yep the idea is right
oh right
Okay I got it
#include <stdint.h>
#include "gdt.h"
#include "../lib/logging.h"
static const uint64_t our_gdt[] = {
0x0000000000000000ULL,
0x00CF9A000000FFFFULL,
0x00CF92000000FFFFULL
};
static const gdtr_t gdt_reg = {
sizeof(our_gdt) - 1,
(uint32_t)our_gdt
};
void gdt_init() {
log("gdt init - start\n", GREEN);
__asm__ volatile (
"lgdt %0\n"
"mov $0x10, %%ax\n"
"mov %%ax, %%ds\n"
"mov %%ax, %%es\n"
"mov %%ax, %%fs\n"
"mov %%ax, %%gs\n"
"mov %%ax, %%ss\n"
"jmp $0x08, $.flush\n"
".flush:\n"
:
: "m"(gdt_reg)
: "eax"
);
log("gdt init - ok\n", GREEN);
}
looks good to me, does it compile?
now you’re chad
:)
@paper cloak
I statically did the GDT
commie ig
Exactly
Thank you for the help
This is so much cleaner holy fuck
I never wanna hear anyone ever complain about the GDT again
Like
It’s so easy
I overximplicated it
But this is literally 30 lines
Okay time to fix my VFS boys
Tmpfs is okay
I feel like this function is over complicated
In tmpfs
static int tmpfs_write(struct vfs_node* node, unsigned char* buffer, unsigned long size) {
if (!node || !node->data_pointer) return -1;
tmpfs_handle_t* h = (tmpfs_handle_t*)node->data_pointer;
tmpfs_inode_t* f = h->inode;
spinlock(&f->lock);
if (f->type != VFS_FILE) {
spinlock_unlock(&f->lock, true);
return -1;
}
size_t endpos = h->pos + size;
size_t need_pages = tmpfs_ceil_div(endpos, TMPFS_PAGE_SIZE);
if (need_pages > f->page_count) {
if (tmpfs_resize_pages(f, need_pages) != 0) return -1;
}
if (h->pos > f->size) {
size_t z = f->size;
while (z < h->pos) {
size_t pg_idx = z / TMPFS_PAGE_SIZE;
size_t pg_off = z % TMPFS_PAGE_SIZE;
size_t chunk = TMPFS_PAGE_SIZE - pg_off;
size_t left = h->pos - z;
if (chunk > left) chunk = left;
if (pg_idx < f->page_count && f->pages[pg_idx]) {
flop_memset((uint8_t*)f->pages[pg_idx] + pg_off, 0, chunk);
}
z += chunk;
}
}
/* perform the write across pages */
size_t off = h->pos;
size_t done = 0;
while (done < size) {
size_t pg_idx = off / TMPFS_PAGE_SIZE;
size_t pg_off = off % TMPFS_PAGE_SIZE;
size_t chunk = TMPFS_PAGE_SIZE - pg_off;
size_t left = size - done;
if (chunk > left) chunk = left;
if (pg_idx >= f->page_count || !f->pages[pg_idx]) {
/* allocate missing page, shouldn't happen after resize, but always use protection :^) */
if (tmpfs_resize_pages(f, pg_idx + 1) != 0) return -1;
}
flop_memcpy((uint8_t*)f->pages[pg_idx] + pg_off, (uint8_t*)buffer + done, chunk);
done += chunk;
off += chunk;
}
h->pos += size;
if (f->size < h->pos) f->size = h->pos;
spinlock_unlock(&f->lock, true);
return (int)size;
}
I love unsigned long
My fav type
I completely forgot I put “always use protection” in that
LMAOOO
well
that went great
fuck
@gentle flicker this is what imeant by bullshit verbose logs
this is verbose logs of all time
congrats !!!!!!!!!
im trying to make mine a buddy allocator as well
also this is a shit ton of verbose info
i figured
i mainly changed how im initializing the pmm
because was
shtting pages out
for no reason
rip
holy shit
I’ve rewritten so much
+40000
-0
"Nothing works. Big commit though"
Wdym 😔

real
Testing is good
I reduced my GDT to 30 lines
Earlier
Redid pmm init
Redoing vfs
Redoing vfs
@small hound where did you read up to implement mutexes
nowhere my mutexes suck and have nothing to show for
I read freebsd and solaris a while back to start implementing priority inheriting turnstile backed mutexes and then I got lazy and disinterested
low aura activities
you should do priority inheriting turnstile backed mutexes like freebsd and solaris
dont listen to linus' hate on it
Oh okay
What about push locks
From NT
I’ll do this
Did you implement mutexes at all?
in fact don't look at any of my code you're cooked if you do
idk
I mean I looked at your spinlock
linux rt mutex is interesting but probably not what you wanna do
That was the only thing I’ve looked at
codebase is one big nothingburger rn
will be like that for a while
Mine is getting better
okay so
i realized im stupuid
and that my vmm functions are extremely complicated
i reread the intel sdm
for page durectories
and tables
and im extremely stupid
int map_page(uint32_t vaddr, uint32_t paddr, uint32_t attrs) {
uint32_t pt_index = (uint32_t)(0xFF000000 >> 12) / 1024;
if (pg_dir[pt_index] == 0) {
pg_dir[pt_index] = (uint32_t) pmm_alloc_page() | PAGE_PRESENT | PAGE_RW;
flop_memset((uint32_t*)pg_dir[pt_index], 0, PAGE_DIRECTORY_SIZE);
}
pg_tbls[vaddr / 1024] = (paddr & 0xFFF00000) | attrs;
return 0;
}
int unmap_page(uintptr_t vaddr) {
pg_tbls[vaddr / 1024] = 0;
__asm__ volatile("invlpg (%0)" :: "a"(vaddr));
return 0;
}
this is it
this is literally it
@radiant grove
Look
I realized I’m stupid
@viscid zephyr sorry for ping but
I rewrote my page mapping stuff
And I realized
That simplicity
Is so much better
Obviously I have lots to rewrute
well thatll be broken on smp
thought i am seeing a total clusterfuck here but this looks ok
Don’t worry, imma make it thread safe soon lol
This is kinda just the logic for the mapping itself
I’ll do shit to prevent race now lol
i meant cuz of the invlpg
Yeah I need to do a proper tlb shootdown
Which
I need to research lol
how did you implement the tlb shootdowjn
also quick question
why are all the file extensions jkl
jackal
#osdev-misc-0 message
"I've extensively studied the vmm of mintia"
is this old mintia
how did you even read dragonfruit
dragonfruit is a deviously unreadable language
its not that bad lmao
bruh im stupid
i was mapping the userspace
in my new vmm
and i kept page faulting
maybe because i didnt mark the pages as fucking present
fucking stupid retard
💀
fn MmAllocWithTag { bytes tag flags -- ptr ok }
if (DEBUGCHECKS)
if (MiInited@ ~~)
"MmAllocWithTag: used before MmInit called\n" KeCrash
end
if (KeIPLCurrentGet IPLDPC >)
"MmAllocWithTag: ipl > IPLDPC\n" KeCrash
end
if (bytes@ ~~)
"MmAllocWithTag: request of 0 bytes\n" KeCrash
end
end
if (flags@ 0 ==)
// can't block, so give this nonpaged allocation a small leg up
POOLALLOC flags!
end elseif (ExBootFlags@ OSBOOTFLAG_NONPAGEDPOOL &)
PAGED ~ flags &=
end
// round up to nearest long
bytes@ 3 + 3 ~ & bytes!
if (bytes@ MiAllocatedHeapBlock_SIZEOF + PAGESIZE 2 / >=)
if (flags@ PAGED &)
bytes@ // bytes
tag@ // tag
flags@ // flags
MiPagedPoolAllocPages ok! ptr!
end else
bytes@ // bytes
tag@ // tag
flags@ // flags
MiNonpagedPoolAllocPages ok! ptr! drop
end
if (DEBUGCHECKS)
if (ok@)
if (flags@ CANBLOCK &)
"MmAllocWithTag: page-aligned CANBLOCK allocation failed\n" KeCrash
end
end
end
return
end
bytes@ // bytes
tag@ // tag
flags@ // flags
MiHeapAlloc ok! ptr!
if (DEBUGCHECKS)
if (ok@)
if (flags@ CANBLOCK &)
"MmAllocWithTag: CANBLOCK allocation failed\n" KeCrash
end
end
end
end``` how does this work
i can't understanda lot of the ~ and @ and ~~
whimsical symbols
I kinda rely on the comments a lot but I kinda get the gist
No
What are you then
Wait did you see my new GDT
Egyptian, my pfp is just for the memes 
When i was 16 i had a phase for like 4 months where i had a Turkish flag pfp and I pretended to be a Turkish ultranationalist
Why the fuck did we all have random nationalist phases
I think it’s the autism
Mine was ironic
I swear everyone here is autistic
Oh mine too
I was a Indonesian nationalist for a while LMAO
I was satirizing a Turkish friend i had who was obsessed with the Ottoman Empire and shit
I would send him this a lot and he'd get really mad
That’s the funniest shit
yeah but what does anything actually mean
He'd go like HOW WOULD YOU FEEL IF I PARODIED YOUR PATRIOTIC SYMBOLS
Having patriotic symbols in general is so cringe
I find it hilarious when people mock bosnian patriotic symbols
yes I am egyptian dude
Nice
I went to Egypt in 2019
Nice place
Cairo is a clusterfuck tho
Most crowded city ever
Deadass
did you get scammed perchance
50 egp for a bottle of water
Nah I speak Arabic so

And I look dark as fuck
I speak like Saudi Arabic
From when I took Quran classes
When I was younger
That’s crazy 😭😭
Ok I'll now take a look at the github
Oh fuck
because I haven't done that already
Just look here lol
I made a clean GDT
@prisma magnet I saw your thread and
Did you do the GDT yet
Wait nvm
🙏 yes
@bold grove OUR gdt
static const uint64_t our_gdt[] = {
0x0000000000000000ULL,
0x00CF9A000000FFFFULL,
0x00CF92000000FFFFULL
};
Questionable naming
why is the gdt such an overblown topic of discussion here
it's like the most useless pointless meaningless thing to discuss about
it feels like it's just for the meme but then the discussions are legitimate questions and inquiry regarding it
gdt init.................. wait a min twin..................................... ok
Because it’s the first part of OSdev that requires research and if you don’t research correctly it’ll be wrong
It’s kinda like paging
It’s the “first mindfuck” out of them all
crazy
Lol everyone had something to say about our_gdt
:flag_ussr:
FloppaOS boots on real hardware
Because my shit was shit
Making it smp compatible
Page fault on CPU #32747
Yup
I’m gonna have 8 CPUs
got multitasking user space code working (kinda), I'll soon create the progress thread
ping me in it im interested too
I’m in userspace
+10 -50000?
yessir
do you think its worth giong for posix compliancy for the syscalls
or should i just do my own thing
SYS_VGA_WRITE 
sys_do_your_mom
you can always do your own thing and have a POSIX layer on top
wha
that uses my syscalls to the posix spec?
ohhhh
tho that could work
i see what you mean
like freebsd's linuxulator
any decent papers on the subject?
i mean i know that wsl1 existed and kinda did the same thing
why do you need a paper on this
to create a posix layer?
because i dont know where to start
you have some syscalls
then you have a user program
that takes in IPC requests for posix calls
and does the proper system calls
and returns the result
you can also do this
where you basically hook another syscall table when the elf's OS is linux
its cool but less cool than doing it in userspace
okay ill just do it in userspace
but ill create my own syscall table first
i already made a handler
do you just stick all software interrupts to 0x80?
you can also just not care and just have posix syscalls directly
it's faster and more convenient but you lose in flexibility
???
shit
ive used it hella
and im actually like
diagnosed
autism spectrum disorder
so
i feel like if im autistic i should be able to use a word like that
MY MAKEFILES. MY. FUCKING. MAKEFILES.
write both your thing and then make a separate POSIX interrupt 
oh
ngl i wanted to do something like that for nullium
i have 0x45 for everything normal and then maybe 0x80 is gonna be unix stuff
(never used those)
static void init_local_apic() {
uint32_t tmp;
lapic_write(LOCAL_APIC_LDR_REG, 0x0);
tmp = (1 >> smp_fetch_cpu());
tmp = tmp << 24;
lapic_write(LOCAL_APIC_LDR_REG, 0xffffffff);
tmp = lapic_read(LOCAL_APIC_SPURIOUS_REG);
tmp = tmp | (1 << 8);
lapic_write(LOCAL_APIC_SPURIOUS_REG, tmp);
}
@small hound smp rewrite under way
nah that sucks
syscall is faster btw
how is the development cycle so fast to be able to rewrite 1 subsystem every 5 days
crazy
because i have no fucking life
and i own a physical copy of the intel sdm
a recipe for disaster
well im just saying
i have lots of time
and all the resrouces in the world
im literally
consatntly programming
i have so many things open
50 github tabs
20 seperate pages of ostep
like
so many things
the life i had is gone
all the people who cared for me before stopped
s o
i have this project
to care about
without this im nothing
parents dont like me, freinds are mad
my girlfriend is furious with me
just
rewriting all this and doing this is the only thing i got going for me
kinda depressing now that i think about it
but its fine
i should probably create a set of locks to protect a process's pagemap @small hound
so i just did this
typedef struct proc_pagemap_locks {
spinlock_t pg_tbls_lock;
spinlock_t special_pgs_lock;
spinlock_t free_kstack_pgs_lock;
} proc_pagemap_locks_t;
💥 👍
fucking
macros
#define SHARED_PG_TBLS 32;
#define VMM_COMMON_SIZE ((SHARED_PG_TBLS*PAGE_SIZE*PAGE_TABLE_SIZE))
#define HIGH_MEM_START_ADDR 0x100000
#define THEORETICAL_MAX_PGS ((0xffffffff / PAGE_SIZE))
#define USER_CODE_SEG_START (0x40000000)
#define FETCH_PAGE_OF_ADDR(addr) (((addr) / PAGE_SIZE))
#define FETCH_PG_START(p) (((p) * PAGE_SIZE))
#define FETCH_PG_END(p) (( (p) + 1 ) * PAGE_SIZE - 1)
#define FETCH_4mb_AREA_OF_ADDR(addr) (((addr) / (PAGE_SIZE * PAGE_TABLE_SIZE)))
#define ALIGN_ADDR_TO_NEXT_PG_BOUND(addr) (FETCH_PG_END(FETCH_PAGE_OF_ADDR(addr)) + 1)
#define MMIO_PTS 1
#define MMIO_SIZE ((MMIO_PTS*PAGE_SIZE*PAGE_TABLE_SIZE))
#define MMIO_START ((SHARED_PG_TBLS - MMIO_PTS) * PAGE_SIZE * PAGE_TABLE_SIZE)
#define MMIO_END (VMM_COMMON_SIZE - 1)
watch out for livelocks
typedef struct stack_alloc {
uint32_t thread_id;
uint32_t pid;
uint32_t is_entry_valid;
uint32_t low_pg;
uint32_t high_pg;
struct stack_alloc* next;
struct stack_alloc* prev;
} stack_alloc_t;
typedef struct address_space {
uint32_t id;
uint32_t is_table_slot_valid;
uint32_t brk; // program break
uint32_t last_byte;
spinlock_t lock;
struct stack_alloc* next;
struct stack_alloc* prev;
} address_space_t;
😎
nah here i am
because im treating address spaces as types
like on purpose
same with the stack allocator
@radiant grove
holy fucking macros
idk i havent smoked weed today
maybe thats the issue
none of these macros are that insane though
its mainly old linux stuff
rip
wellllll
how are you looking through mem maps
horse init... ok
hopes and prayers init - ok
the problem is that i think it detects
but im not sure
itoa be goofy
ima repair it
it should work
im printing the amount of memory map entries found
for testing and stuff
the variable is always 0 somehow
show me kmain()
or whatever equivalent you have
and show me your entry assembly file
i have a hunch youre doing something wrong there
they're on the github they're basically the same except the mmap tag
literally nothing else
lemme send link
https://github.com/jastahooman/nullium/blob/main/kernel/arch/i686/entry.s
https://github.com/jastahooman/nullium/blob/main/kernel/arch/i686/stage1.c
ok done
; behold: the ultimate fuckshit implementation
wise words amirite
truly
multiboot2 stuff
gnu's spec has that stuff too
they're like config tags that tell the bootloader what to do on boot
I need to add
WE DO NOT BREAK USERSPACE - Linus Torvalds [2012]
somewhere
i need to add // WE BREAK USERSPACE - Evil Linus Torvalds [1642]
"nvidia, fuck you"
whic hwas
ok i will now crash out in the wrong thread
its okat
i put my memory tag in the fucking framebuffer tag
this is a crashout safe space
😭
oh lord
its okay
if ity makes you feel better
i can just copy paste it but its the most stupid mistake ever lmfao
fair
so
my ass is much stupider for that lol
shiot i can even try to find that message in here
it was like
in january
january
ok my funny tag things work now
i can add a bootloader name fetch apparently
look
uint32_t tmp_atch_pg(uint32_t phys) {
uint32_t first_reserved = VIRTUAL_USTACK_TOP + 1;
pte_t* ptd = (pte_t*) get_proc_ptd (get_pid());
pte_t* pt;
uint32_t p;
uint32_t used_p;
spinlock_t* special_lock;
// lock special pages to make sure
// we dont get fucked by another thread within the same process
special_lock = &(locks[get_pid()].special_pgs_lock);
spinlock(special_lock);
pt = get_ptaddr(ptd, RESOLVE_PTD_OFFSET(first_reserved), 1);
// walk pt to find first free page
for (p = RESOLVE_PT_OFFSET(first_reserved); p < RESOLVE_PT_OFFSET(first_reserved) + RESERVED_PGS; p++) {
if (pt[p].p == 0) {
used_p = (p - RESOLVE_PT_OFFSET(first_reserved)) * PAGE_SIZE + first_reserved;
break;
}
}
if (used_p == 0) {
log("no reserve pg found\n", RED);
spinlock_unlock(special_lock, true);
return 0;
}
// map used_p by adding new entry to pt
pt[RESOLVE_PT_OFFSET(used_p)] = pte_new(VMM_PROC_RW, SUPERVISOR_PG, 0, phys);
__asm__ volatile("invlpg (%0)" :: "a"(used_p));
spinlock_unlock(special_lock, true);
return used_p;
}
i made my new mapping primitive @small hound
pte_t* ptd = (pte_t*) get_proc_ptd (get_pid());?
ngl ur code often ends up looking kinda disastorous
no offense
it's just all over the place
💥
greatest defence from people "taking inspiration" from it
accuraetr
you're supposed to pull the number out of your ass not fetch it with a function
just gets the pt of the process..
spinlock_unlock(special_lock, true); why true?
pte_t* ptd = (pte_t*) get_proc_ptd (get_pid()); what? why does the mapping logic care?
special_lock = &(locks[get_pid()].special_pgs_lock); what's this?
__asm__ volatile("invlpg (%0)" :: "a"(used_p)); why are we doing inline asm (wrap it in a function)? where is the tlb shootdown?
tmp_atch_pg what does this mean?
uint32_t first_reserved = VIRTUAL_USTACK_TOP + 1; what is happening here?
pt[RESOLVE_PT_OFFSET(used_p)] = pte_new(VMM_PROC_RW, SUPERVISOR_PG, 0, phys); I can take a guess as to what this is doing
true is to restore interrupts
and the mapping logic cares because it knows what virtual address to map to based off of the current process
thats just how im doing it
why not say bool iflag = spin_lock(thing)
what?
this is so odd
why are we bump allocating virtual addresses here?
it takes like 50 lines of code to write a primitive virtual address space allocator since you already have a red black tree
whats the issue with bumping them
you run out of addresses
very fast on 32 bit
64 bit is less bad but you shouldn't be doing it anyways
the function attaches a page to the virtual address space of the current process and returns the virtual address
ok.... no...... that's not how you're supposed to do this at all
you don't just mash together this logic, you have one thing to allocate virtual address regions, another thing to attach them to address spaces, and then you attach an address space to your process
for example a very primitive way of doing this...
struct vas_range {
struct rbt_node node;
vaddr_t start;
size_t length;
};
struct vas_space {
struct spinlock lock;
struct rbt *tree;
vaddr_t base;
vaddr_t limit;
};```
maybe i should just go back to the vm_region_t thing i was doing
whch is kinda like what you are describing
i thought it would be better to do that within the mapping function itself
but
💥
yeah
obviously as you can imagine this is quite suboptimal because of that global lock on the address space
or that's their struct definition
.h
prefer weed over alcohol
alcohol is poison
weed is too but its better 
100%
windows lets you set thread names with SetThreadDescription it is rather humorous
alcohol has brought me so many issues
weed hasnt done shit besides making me eat doritos
alcohol sucks to ingest, has lots of calories and makes you feel like shit the next day
access violation has occured in thread "kernel" 
unless you drink straight liquor 
but yes
no
weed is much more pleasant experience
same.. and even when i do its diabolical
Beer tastes good
a few nights ago i blacked out on fucking jim bean peaech
beer is not strong
Idk what ppl complain about
beer is good
beer isnt strong
but yeah not very strong
also to get drunk on beer you need to consume 3000 calories
which is
alcohol inherently has a lot of calories
yeah
by nature of how calories work
like
heat
alcohol is flammable
so it has a fuck ton lol
what
i dont think that's why
I just think naturally the process from which alcohol is made takes a lot of glucose which cannot be removed without removing alcohol
oh yeah alcohol is just fermented sugar lol
yea
i wanna know why weed isnt legalized in some places then
if alcohol is worse then why isnt it banned
oh
wait
shit that already ahppened
because that would make too much sense
the prohibition laws happened
Thought you guys were talking specifically about beer cuz I didn't read the convo
people did NOT like that
Lots of ppl complain it's nasty
we want beer
ah ethanol is turned into acetylaldehyde then acetate which is linked to acetyl-coa
I think they're stupid
valid,, good beer is hella good
not even old enough to drink that but banning an integral part of many cultures is quite crazy
banning anything like alc or weed is giong to end up bad
alcohol def should be re-evaluated
alc is 100 times worse than weed
alcohol should be more restricted
easily
it's a very bad drug but it is socially accepted
what about tobacco
its also quite shit
not even a drug
tobacco is not a drug
nicotine is like caffeine but slightly more
i smoked cigarettes for a long time and switched to nicotine pouches
money, big tobacco
ah yes corporations as usual
pouches are probably better for you because no smoke and no shitton of chemicals
yeah pouches have improved my health
but nicotine is getting less and less popular
they disintegrate your mouth or something i think
with natural ingredients
better than your lungs and your mouth
over time they can but thats mainyl with chewing tobacco
nicotine itself isnt harmful... its just addictive
true
the problem is addiction
tobacco
every single toxic chemical you can think of
i smoked cigs for 3 years
shit is not for the light hearted
anyway pot in edibles is probably barely harmful for you and should be the #1 recreational drug imo
yea
i remembered a trend in eastern european countries i never saw it happen but it def did happen tho
younger teenagers were buying chewing tobacco and i do not even know why/how they got bored or smth
its probably edible > vaporiser > bong <=> pen > joint in terms of safety
bong may be better
bong isnt so bad
than pen
bong is def better than pen
pens are full of chemicals
pens are the ultimate convenience though
pen only better than joint because you have no ashes
yeah, i like the buzz off a good pen too
thats my fav part
you can hit a pen in a church and no one would know
(or so im told....)
totally never did that in my life
This should probably be in #lounge-0
better than school
oh god
yeah..... but talking about pens ain't reporting progress............ anyways I bought this really cool pen today
I didn't buy a pen today
I dont personally smoke or drink much but my friends do so thats why I know a bit about it
Or did i
most sober member of osdev discord
i also have a pen
it has black ink in it and it writes stuff very clearly its like really cool
yeah im cooked
im def the least sober out of all the people with kernels here
last time I drank too much and puked so now I'm kinda conditioned to have a gag reflex whenever I smell alcohol 
i would love me an alcoholic kernel dev boyfriend
same LMAO
im probably the most sober out of here
i got hammered off jim bean peach and my dad got peaches today and i literally almost threw up
yall are just deadass smoking drugs here
Ok Fair
the morning after the smell of toothpaste disgusted me bro
because toothpaste has alcohol slightly
💀
I eat dirt
smoking drugs 😎
I have only tried it once
will probably do again instead of drinking
id honestly prefer not getting addicted at all
is weed even addictive
except trying to fix a single function that keeps breaking 
(literally gambling)
not physically
like alcohol
but it can be mentally addicting
ive definitely struggled
but the thing is
Parentheses parentheses done
i can quit weed for weeks at a time and be fine
but whenever im super into alc
quitting seems impossible
like whenever i go on vacations
i quit weed
no issues
What are the effects of FloppaOS on camembert cheese
it doesnt affect the cockroach population
I'm probably in the top 1% in terms of sobriety in my age group so I think im fine 
idk hopeully it doesnt affect the boar hunting season here
i wish... i just hung out around the wrong people for a few years and it permanently fucked me up
Does it affect the population of catfish in Brazil and Alaska?
been to rehab many times
it does
what about the maine lobster population
Ooh that's important too
[AD] nullium doesn't though try nullium now 
I hang out with stoners but I dont smoke
stoners are the best
never had an issue with them
its just the heavy drinkers and party drug people that are bad
like
i was staying with these peoplefor a few weeks
It apparently affects the growing speed of sweet corn
yeah I guess if you're staying with them its worse
and i found out they were lacing my morning coffee with MDMA
like some pink floyd syd shit
nah he did lsd
ik but his rommates laced his coffee with lsd
and my roommates did too just with MDMA
a better music reference would be the beatles' dentist who laced the beatles' tea with lsd

LSD is practically harmless unless you're predisposed to schizophrenia
which is nice
dnt really have a desire to get any
lsd is dope
i just had too many bad times on it
unironically LSD and shrooms and other psychedelics are like the safest drugs
and can even be beneficial
oh yeah, psychs are much safer than anything
there is therapeudic qualities of psychs
and mdma
ive heard arguments for ketamine bu
that fool elon musk uses it
and i dont wanna end up like him
isnt it a dissociative
idk what it is
Sun Microsystems supports eradication of wheat crops in Inner Mongolia and Manchuria
what about the korean peninsula
I have been on ketamine in the past
Oracle got 90% of their crops
(surgery
)
yeah only once
i did it recreationally one time
and holy fucking shit
i cannot see any
medical benefits from that
it was literally a trance state
i was in a true state of stupor
i couldnt speak, see, hear, feel ,
anything besides what i was tripping
idk i was like 4 years old I dont remember
yeah
man speaking of that
there was one time i started waking up from a surgery
and for some reason the anaesthesiologist didnt notice for like 2 min
i had to literally scream at the top of my lungs to get a slight sound out of my mouth
and then they fixed it
fucking horrifying
Oof
they put me on it when i got my wisdom teeth out and i just remember seeing patterns dancing on a beige background and occasionally being able to feel little taps on my jaw (probably the most violent moments of the surgery) and not being able to even think, my self was completely gone i was just passively accepting and recording input
damn thats a hard drug for wisdom teeth
fr
I only had partial anesthesia
its like heroin for a sprained ankle
and they didnt put enough so it hurt a shitton
ketamine isnt an unusual dental anesthetic
yeah theyve been usin it in recent years
Dude I check this server for a moment at 3am and first thing I see in this thread is discussion about alcohol and weed
health is overrated
you know even outside of drugs
the worst drug is adrenaline
crazy extreme sports are so addicting
Erm actually.... its 4 in my superior AMERICAN TEXAS TIMEZONE. GOD SAVE ELON MUSK AND TRUMP. 🇺🇸 /s
Superior American Texas time zone 😭😭
4 pm...?
Mf you're in UTC+3
yeah
4 AM
9pm in eastern timezone (best timezone)
because i am in pacific
I don't live in texas
9 minutes
I thought you were in landmine land....... meow
bosnia is known as the landmine land
more landmines in bosnia than anywhere else in the world
walking in the forest in bosnia is like playing minesweeper
Real life experience
stolen valor from laos
maybe its true bosnia has the most landmines specifically. but laos has the most unexploded munitions laying around buried under a few inches of soil
like 50 laotian farmers get blown up every year trying to expand their fields
yea i knew a guy from laos and he said that
Only took around half a century to get em
jesus bro what
during the vietnam war the usa continuously carpet bombed the laotian countryside indiscriminately for over a decade straight
they dropped ~60 million bombs i think
like 30% of them didnt explode
its kind of a shame the damage to laos from the vietnam war is mostly ignored
and we just never cleaned them up
djdnt they bomb laos because the viet kong shipped supplies through there
60 million units of democracy
doesnt excuse it
And FREEDOM BABY
the viet kong were the good guys
🇺🇸 🇺🇸
the facsist ass south leader that was backed by our "democracy" was the bad guy
not if youre defneding yourself from western imperialism
shit
violence IS the answer
when it comes to that
colonialism
can only be refuted with violence
God how did this convo devolve from osdev to drugs to the Vietnam war
yeah the vietnam war wasnt some inscrutably morally complex conflict it was just invaders vs ppl defending their home
👊 🇺🇸 🔥
it started with a revolutionary war by the viet minh against the french colonists
the cia gotta be my second favorite terrorist organization
it was just us throwing orange chemicals in forests for no reason
bedause of ComMuNiSm
america might be the worst out of the imperialist nations for that shit
dont even mention the marshall islands
AMERICA FUCK YEAH !! 🇺🇸 🇺🇸 🇺🇲 WHAT THE FUCK IS THE GENEVA CONVENTION!!
yeah were gonna nuke your entire homeland but you can live in shitty american row houses for free!
basically there were some guys fighting the french colonists in the earlier 20th century and eventually the french were kicked out by imperial japan who rolled in, and then those guys kept fighting japan. eventually japan surrendered in ww2 and left and then the vietnamese declared their own republic and celebrated
geneva suggestion at this point
they were promptly re-invaded by france trying to reclaim their colony
which sparked the war
we basically got dragged into it by france
yeah because of their indochina bullshit
they actually won against the french at bien dien phu and they won so hard they got the stupid fucking colonialist french general to kill himself
one of the best things ever to happen
the french left after that and then we rolled in
damn bro thats ultimate defeat
then we spread democracy 
aka killing both innocent viets and innocent american soldiers who were forced and drafted
the whole country was mad at the gov for the vietnam shit
Spread love not napalm
like imagine one day waking up and being forced into a booby trapped forest in vietnam for fuck knows what reason
i cant even imagine that
dien bien phu not bien dien phu
the most based shit in history was the haitian slave rebellion
they literally just murdered every european on the island and told them to fuck off
and it worked
Are you implying that you have only ONE friend? 
iirc the french set up their colonial hq in a place considered defensible because it was surrounded by mountains and then ho chi minh's army proceeded to just drag artillery up like 70 degree slopes into the mountains and started bombarding the french
helicopters were sent to try to evacuate the hq and they were shot down
im implying i have none and that i am a figment of your imagination
ultimately the french all surrendered and the general killed himself in his bunker
good ending


